【问题标题】:How to write and update .txt files with python?如何使用 python 编写和更新 .txt 文件?
【发布时间】:2019-06-26 14:31:25
【问题描述】:

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

在脚本的开头:

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

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

我的问题是:

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

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

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

【问题讨论】:

  • 是否需要每次都覆盖文件,还是只写到文件末尾?
  • 对于小文件和短期程序来说多余的东西可能对大文件和长期运行的程序至关重要。无论如何,“最有效”似乎是一个错误的问题。你指的是什么指标?
  • 取决于你是否关心另一个并发版本的代码正在运行,或者这个版本崩溃......听起来你应该考虑使用关系数据库,它们可能对这类事情有好处跨度>
  • @בנימיןכהן 我需要写在文件的末尾。不能选择丢失以前写入的数据。
  • @tripleee 我引用了我的问题的一部分:“哪种方式可以最大程度地减少产生与数据写入方式相关的任何错误的风险。”。我的意思是哪种方式可以提高不损坏文件的可能性。

标签: python bitcoin


【解决方案1】:

保持文件打开会更快。在您提到的 cmets 中,“以前写入的数据丢失不是一种选择”。打开文件损坏文件的可能性更高,因此每次迭代打开和关闭文件更可靠。 还有一个选项可以将数据保存在某个缓冲区中,并在收到所有数据或用户/系统中断或网络超时时将缓冲区写入/追加到文件中。

【讨论】:

  • 这是我正在寻找的答案,但我猜我没有正确表达这个问题。我现在正在做的是我设置了一个 20 秒的时间,它有多种用途,其中一个是让我有时间在每 100 个写入数据块中终止脚本。因此 txt 文件被关闭并存储数据。我打算将脚本更改为您的建议。但是,在执行时间和最终文件损坏的可能性之间存在权衡。
【解决方案2】:

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

我猜应该是这个样子

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

【讨论】:

    【解决方案3】:

    运行一个基准测试,自己看看这类问题的典型答案。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2019-02-23
      相关资源
      最近更新 更多