gpt4 book ai didi

python - 如何在遍历文件中的行时从文件中删除行?

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:13 24 4
gpt4 key购买 nike

我正在运行带有 Python 3.6.8 的 Ubuntu 16.04 LTS,我有以下代码,允许我遍历文件中的行,我在其中处理每一行并将数据附加到数据库。我需要处理一行,然后删除它或将其替换为 \n 或做任何事情来减小文本文件的文件大小。另外,我最多需要 2 个文件副本:数据库和第一行删除的文件。

with open(filename, buffering=1000) as f:
for rows in f:
#process text
#delete row or replace with '\n'

我该怎么做?

最佳答案

这里有一个大问题:在大多数操作系统及其文件系统上,您不能删除文件的中间部分,即使可以,它也是一个具有复杂限制的深奥操作。

因此,从文件中间删除的正常方法是重写整个文件。但是您似乎在评论中指出您的文件有数百 GB。因此,读取整个文件、处理一行并重写整个文件的开销很大,并且需要额外的临时存储空间。如果你想为每一行都这样做,你最终会做更多的工作并且需要大约两倍的磁盘空间。

如果您绝对必须这样做,这里有一些可能性:

  • 向后阅读文件并在阅读时截断它。向后阅读它会很尴尬,因为没有多少设置可以帮助解决这个问题,但原则上这是可能的,你可以 truncate像这样的文件结尾,无需复制。
  • 使用较小的文件,并在处理完每个文件后将其删除。这取决于您是否能够更改文件的创建方式,但如果您可以更改文件的创建方式,事情就会简单得多,并且可以让您更快地删除已处理的片段。

另一方面,你肯定需要吗?问题是文件太大,如果它还在磁盘上,数据库会用完空间吗?或者您只想同时处理更多大文件?如果是后者,您是否检查过同时处理多个文件实际上比一个接一个地处理相同文件更快?当然,您可以购买更多磁盘还是更大的磁盘?

关于python - 如何在遍历文件中的行时从文件中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55285906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com