【问题标题】:Python: Why do my loops on a certain text file read empty lines although the file is not empty? [duplicate]Python:为什么我在某个文本文件上的循环读取空行,尽管该文件不是空的? [复制]
【发布时间】:2016-05-31 06:49:06
【问题描述】:

我今天尝试学习和试验 Python,我开始尝试打开一个文本文件,从中读取行,然后将这些行写入第二个文本文件。之后,我尝试将两个文件中的行加载到列表中,并在控制台中打印这些列表。下面是实验代码:

f = open('D:\\origFile.txt', 'r')
f2 = open('D:\\copyFile.txt', 'w')

for line in f:
    f2.write(line.rstrip() + ' ')
f2.close()

s=""
for linez in f:
    s += linez
    print (s)

s2=""
f2 = open('D:\\copyFile.txt', 'r+')
reading = f2.readlines()
print (reading)

for linex in f2:
    s2 += linex
    print (linex)

list1=s.split()
list2=s2.split()
print(list1)
print(list2)
f.close()
f2.close()

仅当我删除或评论此部分时,代码才能按预期工作:

f2 = open('D:\\copyFile.txt', 'w')

for line in f:
    f2.write(line.rstrip() + ' ')
f2.close()

虽然在将f1 的内容写入文件后,我已经关闭了f2 文件。那么为什么它会影响代码中其余的文件操作呢?它仍然如何影响f1?如,最后的列表既不是来自f1 也不是f2 的文本。

编辑1:在我的问题中,我已经尝试关闭第二个文件,认为这将是我的问题的原因,而不是循环本身;而另一个问题甚至没有一个循环来满足我的问题的答案。尽管答案有些相同,但另一个问题中的答案并未显示如何重复使用文件的内容,而无需使用 f.seek(0) 重置迭代器以便能够在多个循环中使用内容,如我的上面的代码。

【问题讨论】:

  • 你在for line in ffor linez in f 之后做了,但你已经阅读了 f 中的所有行。使用新变量名不会倒回文件。
  • 那么在 Python 中,循环不会倒带吗?在尝试再次循环之前,我必须自己将指针倒回到文件的开头?
  • 不是指针。将其视为一个流,您可以从中将数据“输入”到您的 linelinez 变量中。如果您清空流,您将不再获得数据。执行 f.seek(0) 以倒回到流的开头。
  • f.seek(0)
  • @nsilent22 知道了。我确实猜想这是关于迭代器的问题,但我不知道如何使用 f.seek(0).. 将其设置为文件的开头,而另一种方法是如下所述 John Gordon .. 谢谢你的帮助。

标签: python file python-3.x io


【解决方案1】:

您正在尝试循环遍历f 的内容两次:

for line in f:

for linez in f:

...你不能那样做。第二个循环将立即退出,因为您已经阅读了所有行;没有可读的了。

如果您想保存文件的行并多次循环,请使用以下内容:

all_lines = f.readlines()

【讨论】:

  • 这是关于迭代器在我到达for linez in f: 的第二个循环时位于文件末尾的问题。明白了,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2015-04-03
  • 2020-05-05
相关资源
最近更新 更多