【问题标题】:i'm using write() to write the results into a file but it does not contain the result of last loop我正在使用 write() 将结果写入文件,但它不包含最后一个循环的结果
【发布时间】:2012-07-13 17:10:43
【问题描述】:

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

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

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

abcd0
abcd1
abcd2

但文件只包含,

abcd0abcd1

我想要的输出是,

abcd0abcd1abcd2

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

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

【问题讨论】:

  • 你真的应该用你正在使用的语言开始标签。又是什么?

标签: python file for-loop


【解决方案1】:

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

【讨论】:

  • 是的,我首先犯了你在上面写的同样的错误。感谢您的意见。真的很有帮助
【解决方案2】:

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

opener.close()

到最后。

【讨论】:

    【解决方案3】:

    使用with(),这样你就不用担心文件的打开和关闭,with()在程序移出with块时会自动关闭文件。

    with open('data.txt','a') as opener:
        for a in range(3):
            results = 'abcd' + str(a)
            print results
            opener.write(results)
    

    【讨论】:

    • 我不知道 with()。谢谢,我稍后试试这个
    • @user1512491 我建议你学习with 而不是手动关闭文件,阅读更多相关信息here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2015-09-25
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多