加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:34:05 所属栏目:Python 来源:网络整理
导读:我正在尝试将列表写入文件.我的代码写入除最后列表之外的所有列表.我不知道为什么.有人可以看看我的代码,让我知道我做错了什么? complete_test=[['apple','ball'],['test','test1'],['apple','testing']]counter = 1for i in complete_test: r=open("testin
我正在尝试将列表写入文件.我的代码写入除最后列表之外的所有列表.我不知道为什么.有人可以看看我的代码,让我知道我做错了什么?

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(),并了解这是你正在做的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读