简单地说,我有一个代码:
for a in range(3):
result = 'abcd' + a
opener = open('file.txt', "a")
print results
opener.write(results)
我的问题是,如果我在shell中运行此代码,我可以看到打印结果,
abcd0
abcd1
abcd2
但该文件仅包含
abcd0abcd1
我想要的输出是,
abcd0abcd1abcd2
有什么建议吗?我找不到这段代码的错误......
任何帮助都会非常棒。提前谢谢
答案 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)