我正在尝试将列表写入文件。我的代码写了除最后一个列表之外的所有列表。我不知道为什么。有人可以看看我的代码并让我知道我做错了什么吗?
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()
会关闭文件并写入更改。
这是上下文管理器和 with
语句的激励示例,如 inspectorG4dget 的回答。他们为您处理文件的打开和关闭。使用该代码,而不是实际上调用r.close()
,并理解这就是您执行此操作时发生的情况。
关于python - 循环中的最后一个文件未在解释器 session 期间写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316267/