【问题标题】:Python Loop Only Parses First Five Lines of Text FilePython 循环仅解析文本文件的前五行
【发布时间】:2017-02-16 22:33:14
【问题描述】:

我正在尝试使用readline 函数在Python 中逐行读取和打印.txt 文件。下面的代码旨在逐行打印出整个文本文件,但到目前为止,它只打印出文本文件的前五行。

filename = input("Enter the name and extension of the file you want to open.")
file = open(filename, "r")
fileline = file.readline()
for line in fileline:
    fileline = fileline.rstrip("\n")
    print(fileline)
    fileline = file.readline()
file.close()

我希望代码能够逐行打印出整个文件,但目前它只打印出前五行。代码有什么bug?

【问题讨论】:

  • 你应该争取更好的标题。想象一下一个网站,其中每个标题都与您的标题相似,首页的内容也会如此。
  • 文件第一行有多少个字符?
  • for line in fileline 是循环遍历行的字符,而不是遍历行。
  • @SamRockitt 为了简洁起见,我编辑了你的帖子......你会因为在帖子中使用个人语言和如此多的重复措辞而得到很多负面评价......请随时进一步编辑您希望,但想解释编辑背后的原因。我还建议您按照您提供的方式放置控制台输出和文件内容。为了便于阅读,请将它们作为代码块。谢谢!
  • @SamRockitt 另外,为了清楚起见,请张贴作业问题的确切措辞。你一直在暗示它。不要费心用你自己的话来描述它......只需发布确切的问题以减少混淆。

标签: python file readline


【解决方案1】:

这一行:

for line in fileline:

循环遍历包含文件第一行的fileline 的字符。所以如果第一行有 5 个字符,这个循环会执行 5 次。

然后在循环内,打印该行,然后将下一行读入fileline 变量。这对循环没有影响,它仍在迭代第一行中的字符。

要让程序故意打印前 5 行,可以这样做:

for i in range(5):
    fileline = file.readline()
    if (fileline == ''): #end of file reached
        break
    print(fileline.rtrim('\n'))

或者您可以遍历file,它会自动读取行,并使用单独的计数器变量

i = 0
for line in file:
    print(line.rtrim('\n'))
    i += 1
    if i == 5:
        break

【讨论】:

  • fileline 是一行,line 只是一行中的一个字符。
  • for line,_ in zip(file, range(5)): print(line)
  • @SamRockitt 换行符是第 5 个字符。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多