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

标签 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() 会关闭文件并写入更改。


这是上下文管理器和 with 语句的激励示例,如 inspectorG4dget 的回答。他们为您处理文件的打开和关闭。使用该代码,而不是实际上调用r.close(),并理解这就是您执行此操作时发生的情况。

关于python - 循环中的最后一个文件未在解释器 session 期间写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316267/

相关文章:

python - 使用groupby操作计算Pandas百分比

python - 使用 *list 传递参数不适用于 execl

python - 无法将 Spark 添加到 PYTHONPATH

python - C++ 中的 include 与 python 中的导入

python - CherryPy:需要异常处理帮助

python - Odoo:如何将字段相互链接?

python - 如何在 Windows cmd 上从 pip 安装 Pandas ?

python - 在 Python 上读取 .cdb 数据集

python - 为相同的字典值创建可交换元组键的最佳方法是什么?

python - 有更简单的方法来检测 python 中的元音吗?