1

由于某种原因,在我的 for 循环之后,我无法读取输出文本文件。例如 :

for line in a:
 name = (x)
 f = open('name','w')
for line in b:
 get = (something)
 f.write(get)
for line in c:
 get2 = (something2)
 f.write(get2)

 (the below works if the above is commented out only)

f1 = open(name, 'r')
for line in f1:
 print line

如果我注释掉循环,我就可以读取文件并打印内容。

我对编码非常陌生,并且猜测这是我所缺少的显而易见的东西。但是我似乎无法弄清楚。我用过谷歌,但我读得越多,我就越觉得我错过了一些东西。任何建议表示赞赏。

4

1 回答 1

3

@bernie 在他上面的评论中是正确的。问题是当你这样做时open(..., 'w'),文件被重写为空白,但 Python/操作系统实际上并没有将你的东西写到write磁盘上,直到它的缓冲区被填满或者你调用close(). (这种延迟有助于加快速度,因为写入磁盘很慢。)您也可以flush()在不关闭文件的情况下调用强制执行此操作。

bernie 提到的with声明如下所示:

 with open('name', 'w') as f:
     for line in b:
         b.write(...)
     for line in c:
         b.write(...)
 # f is closed now that we're leaving the with block
 # and any writes are actually written out to the file

 with open('name', 'r') as f:
     for line in f:
         print line

如果您使用的是 Python 2.5 而不是 2.6 或 2.7,则必须from __future__ import with_statement在文件顶部执行操作。

于 2012-05-16T05:24:16.493 回答