2012-07-13 42 views
0

简单的结果,我有这样一个代码:我使用write()都写结果到一个文件,但它不包含最后一个循环

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

我的问题是,如果我运行这个在壳代码,我可以看到打印结果,

abcd0 
abcd1 
abcd2 

但该文件仅包含,

abcd0abcd1 

我想输出是,

abcd0abcd1abcd2 

有什么建议吗?我无法找到这个代码有什么问题...

任何帮助将是非常好的。在此先感谢

+0

您确实应该使用正在使用的_language_开始标记。又是什么? – Oded 2012-07-13 17:11:47

回答

3

阿什维尼·乔杜里的解决方案是好了很多,考虑我的回答就像在什么地方出了错一份背景和为什么出错,开放的区别/关闭循环内部或外部文件。

文件打开和关闭必须配对,喜欢这里,文件被反复打开,写入和关闭在循环中:

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() 

当然,当文件保持打开并且循环很长时,您可能会丢失数据d程序崩溃,被中断或重新启动计算机。在这些情况下,强制刷新操作系统在很多情况下是比反复打开/关闭文件更好的选择:

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

是的,我首先完成了你在上面写的同样的错误。感谢您的建议。它确实有帮助 – 2012-07-13 17:48:56

2

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

opener.close() 

到最后。

+0

谢谢!这是非常简单的... – 2012-07-13 17:44:18

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) 
+0

我不知道与()。谢谢我以后再试试这个 – 2012-07-13 17:44:47

+0

@ user1512491我建议你学习用''而不是手动关闭文件,更多地了解它[在这里](http://preshing.com/20110920/the-python-以声明为例) – 2012-07-13 17:48:47

相关问题