0

简而言之,我有一个类似的代码:

for a in range(3):
 result = 'abcd' + a
 opener = open('file.txt', "a")
 print results
 opener.write(results)

我的问题是,如果我在 shell 中运行此代码,我可以看到打印结果,

abcd0
abcd1
abcd2

但该文件仅包含,

abcd0abcd1

我想要的输出是,

abcd0abcd1abcd2

有什么建议么?我找不到这段代码有什么问题...

任何帮助都会非常棒。提前致谢

4

3 回答 3

3

Ashwini Chaudhary 的解决方案要好得多,将我的回答视为出错原因和出错原因的背景资料,以及在循环内部或外部打开/关闭文件的区别。

文件的打开和关闭应该是成对的,就像这里,文件在循环内反复打开、写入和关闭:

for a in range(3):
    result = 'abcd' + a
    opener = open('file.txt', "a")
    print results
    opener.write(results)
    opener.close()

但是,在许多情况下,由于打开和关闭文件的成本,在循环中打开和关闭文件并不是一个好主意,因此最好在循环之前打开文件,在循环中写入文件,然后循环后关闭它:

opener = open('file.txt', "a")
for a in range(3):
    result = 'abcd' + a
    print results
    opener.write(results)
opener.close()

当然,当文件保持打开状态并且循环很长时,如果程序崩溃、中断或重新启动计算机,您就有丢失数据的风险。在这些情况下,强制刷新到操作系统在许多情况下比重复打开/关闭文件更好:

opener = open('file.txt', "a")
for a in range(3):
    result = 'abcd' + a
    print results
    opener.write(results)
    opener.flush()
opener.close() 
于 2012-07-13T17:27:39.663 回答
2

您可能想在完成写入后尝试关闭文件。如果python在文件关闭之前退出,最后一次写入可能不会被刷新,因此不会写入文件。只需尝试添加:

opener.close()

到最后。

于 2012-07-13T17:19:29.710 回答
2

使用with(),因此您不必担心文件的打开和关闭,with()一旦程序移出with块,就会自动关闭文件。

with open('data.txt','a') as opener:
    for a in range(3):
        results = 'abcd' + str(a)
        print results
        opener.write(results)
于 2012-07-13T17:25:15.887 回答