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

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...