微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在解释器会话期间未写入循环中的最后一个文件

我正在尝试将列表写入文件.我的代码写入除最后列表之外的所有列表.我不知道为什么.有人可以看看我的代码,让我知道我做错了什么?

complete_test=[['apple','ball'],['test','test1'],['apple','testing']]
counter = 1
for i in complete_test:
    r=open("testing"+str(counter)+".txt",'w')
    for j in i:
        r.write(j+'\n')
    counter=counter +1

谢谢.

解决方法

你需要调用r.close().

如果您将代码作为Python文件运行,则不会发生这种情况,但它在解释器中可以重现,并且出现这种情况:

文件的所有更改都是缓冲的,而不是立即执行.当不再有任何对它们的有效引用时,cpython将关闭文件,例如在循环的每次迭代中覆盖引用它们的唯一变量时. (当它们关闭时,所有缓冲的更改都会被刷新写出来.)在最后一次迭代中,你永远不会关闭文件,因为变量r会一直存在.您可以验证这一点,因为在解释器中调用exit()会关闭文件并导致更改被写入.

这是上下文管理器和语句的一个激励性示例,如在inspectorG4dget的答案中.他们为您处理文件的打开和关闭.使用该代码,而不是实际调用r.close(),并了解这是你正在做的事情.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐