如何使用 python 编写和更新 .txt 文件?

How to write and update .txt files with python?

我已经编写了一个脚本来获取比特币数据并将其保存在 .txt 文件中,或者在存在 .txt 文件的情况下更新它们。 .txt 文件是节点和连接 neo4j 节点的关系。

脚本开头:

  1. 它检查文件是否存在,因此它打开它们并追加新行或
  2. 如果文件不存在,脚本会创建它们并开始追加行。

.txt 文件不断打开,脚本写入新数据。当所有数据写入或我终止执行时,.txt 文件关闭。

我的问题是:

我应该为每次迭代和每个 .txt 文件打开、写入、关闭每个 .txt 文件吗?

我应该保持现在的样子吗?打开.txt文件,进行所有的写入,写入完成后关闭.txt文件

我正在保存 6013 个块的数据。哪种方式可以最大限度地降低损坏写入 .txt 文件的数据的风​​险?

我认为保持文件打开会更有效率,因为 python 不需要在每次要 read/write 文件时搜索文件并打开它。

我想应该是这样的

with open(filename, "a") as file:
    while True:
        data = # get data
        file.write(data)

运行 一个基准并亲眼看看会是这类问题的典型答案。

尽管如此,打开和关闭文件确实需要成本。 Python 需要为与文件关联的缓冲区和数据结构分配内存,并调用一些操作系统函数,例如open 系统调用会在缓存或磁盘上搜索文件。

另一方面,程序、用户、整个系统等可以同时打开的文件数量是有限制的。例如在 Linux 上,/proc/sys/fs/file-max 中的值表示内核将分配的 file-handles 的最大数量。当您收到大量关于 运行 文件句柄不足的错误消息时,您可能需要增加此限制 (source)。 如果您的程序在这种限制性环境中运行,那么最好只在需要时打开文件。

保持文件打开会更快。在您提到的评论中 "Loss of data previously written is not an option"。打开的文件损坏文件的可能性更高,因此每次迭代打开和关闭文件更可靠。 还有一个选项可以将数据保存在某个缓冲区中,并在收到所有数据时或 user/system 中断或网络超时时 write/append 缓冲区到文件。