【问题标题】:Python adding new line when printing indexes from tuplesPython在从元组打印索引时添加新行
【发布时间】:2019-07-05 05:34:48
【问题描述】:

我正在尝试从同一行上的两个单独的元组打印两个单独的索引。但是当我使用 f-strings 打印时,它会将我打印的第二个索引放在新行上。

无论我尝试什么似乎都无法弄清楚它总是在新行上打印姓氏。

surnames = tuple(open("Surnames.txt", "r"))
first_names_male = tuple(open("Male_names.txt", "r"))
first_names_female = tuple(open("Female_names.txt", "r"))

print(f"{first_names_male[0]} {surnames[0]}")

应该在一行上打印出“David Smith”

相反,它在第一行显示大卫,然后在下一行显示一个空格,然后是史密斯

【问题讨论】:

  • open() 的用法真的很奇怪。通常你会先将文件内容读入一个列表。
  • “错误”可能会发生,因为文件中的每一行都以换行符结尾。如果您不想这样,请尝试阅读第一行并在该行使用.strip()
  • 试试print(f"{first_names_male[0].strip()} {surnames[0].strip()}")
  • 最好显式存储文件句柄以便关闭(或使用with
  • 请阅读cpython官方文档:docs.python.org/3/tutorial/…

标签: python python-3.x tuples


【解决方案1】:

您可以使用这样的代码从文件中的每一行末尾删除新行并显式关闭文件:

with open("Surnames.txt", "r") as f:
    surnames = f.read().splitlines()
with open("Male_names.txt", "r") as f:
    first_names_male = f.read().splitlines()
with open("Female_names.txt", "r") as f:
    first_names_female = f.read().splitlines()

print(f"{first_names_male[0]} {surnames[0]}")

如果您愿意,也可以这样:

with open("Surnames.txt", "r") as f:
    surnames = map(str.rstrip, f)
    # or
    surnames = [r.rstrip('\n') for r in f]

更多选项请见https://stackoverflow.com/a/12330535/3830997

【讨论】:

  • 我觉得还有.readlines()可以代替.read()使用
  • 是的,但是f.readlines() 将换行符保留在每行的末尾,所以它几乎等同于list(f)。无论哪种方式,您都必须先去掉换行符,然后才能使用这些行。
  • 有趣的区别;我没有注意到这一点。很好的答案。
【解决方案2】:

这样可以更好地处理文件,因为它还会关闭文件并从每行末尾删除换行符。

def func(filename):
    line_list = []

    with open(filename) as f:
        for line in f:
            line = line.strip()
            if len(line) > 0:
                line_list.append(line)

    return line_list


if __name__ == '__main__':
    surnames_list = func('Surnames.txt')
    male_names_list = func('Male_names.txt')
    female_names_list = func('Female_names.txt')

    print(f"{male_names_list[0]} {female_names_list[0]}")

这会给你想要的结果吗?

【讨论】:

  • 我似乎得到一个 TypeError: 'NoneType' object is not subscriptable
  • @lammyalex 抱歉,忘记在函数中包含return
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2021-11-02
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
相关资源
最近更新 更多