我正在使用write()将结果写入文件,但它不包含最后一个循环的结果

时间:2012-07-13 17:10:43

标签: python file for-loop

简单地说,我有一个代码:

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

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

abcd0
abcd1
abcd2

但该文件仅包含

abcd0abcd1

我想要的输出是,

abcd0abcd1abcd2

有什么建议吗?我找不到这段代码的错误......

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

3 个答案:

答案 0 :(得分: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() 

答案 1 :(得分:2)

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

opener.close()

到最后。

答案 2 :(得分: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)