我正在尝试将列表写入文件.我的代码写入除最后列表之外的所有列表.我不知道为什么.有人可以看看我的代码,让我知道我做错了什么?
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 举报,一经查实,本站将立刻删除。