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