我正在尝试将列表写入文件.我的代码写入除最后列表之外的所有列表.我不知道为什么.有人可以看看我的代码,让我知道我做错了什么?
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(),并了解这是你正在做的事情.