gpt4 book ai didi

python - 在 Python 中有效地将文本添加到非常大的文本文件中

转载 作者:行者123 更新时间:2023-11-28 23:06:28 24 4
gpt4 key购买 nike

我必须在现有但非常大(2 - 10 GB 范围)的文本文件中添加一些任意文本。由于文件太大,我试图避免将整个 文件读入内存。但是我是否对逐行迭代过于保守?转向 readlines(sizehint) 方法会比我当前的方法给我带来更多的性能优势吗?

最后的删除和移动不太理想,但据我所知,没有办法就地对线性数据进行这种操作。但我不太精通 Python——也许我可以利用 Python 的一些独特之处来更好地完成这项工作?

import os
import shutil
def prependToFile(f, text):
f_temp = generateTempFileName(f)
inFile = open(f, 'r')
outFile = open(f_temp, 'w')
outFile.write('# START\n')
outFile.write('%s\n' % str(text))
outFile.write('# END\n\n')
for line in inFile:
outFile.write(line)
inFile.close()
outFile.close()
os.remove(f)
shutil.move(f_temp, f)

最佳答案

如果这是在 Windows NTFS 上,您可以插入文件的中间。 (有人告诉我,我不是 Windows 开发人员)。

如果这是在 POSIX(Linux 或 Unix)系统上,您应该像其他人所说的那样使用“cat”。 cat 非常高效,使用书中的每一个技巧来获得最佳性能(即无效复制缓冲区等)

但是,如果您必须在 python 中执行此操作,则可以通过使用 shutil.copyfileobj()(需要 2 个文件句柄)和 tempfile.TemporaryFile(创建一个在关闭时自动删除的文件)来改进您提供的代码:

import os
import shutil
import tempfile

def prependToFile(f, text):
outFile = tempfile.NamedTemporaryFile(dir='.', delete=False)
outFile.write('# START\n')
outFile.write('%s\n' % str(text))
outFile.write('# END\n\n')
shutil.copyfileobj(file(f, 'r'), outFile)
os.remove(f)
shutil.move(outFile.name, f)
outFile.close()

我认为不需要 os.remove(f),因为 shutil.move() 会删除 f。但是,您应该对此进行测试。此外,可能不需要“delete=False”,但保留它可能是安全的。

关于python - 在 Python 中有效地将文本添加到非常大的文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965111/

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