如何解决以内存高效的方式在python中更快地编写大文件
我正在尝试使用相同的文本创建一个大文件,但我的系统在一段时间后执行脚本后挂起。
the_text = "This is the text I want to copy 100's of time"
count = 0
while True:
the_text += the_text
count += 1
if count > (int)1e10:
break
注意:以上是我的代码的过度简化版本。我想多次创建一个包含相同文本的文件,文件大小约为 27GB
。
我知道这是因为 RAM 过载了。这就是我想知道如何在 python 中以快速有效的方式做到这一点。
解决方法
不要在内存中累积字符串,而是将它们直接写入文件:
the_text = "This is the text I want to copy 100's of time"
with open( "largefile.txt","wt" ) as output_file
for n in range(10000000):
output_file.write(the_text)
在我的笔记本电脑上使用 SSD 创建一个大约 440MiB 的文件需要大约 14 秒的时间。
上面的代码一次写入一个字符串 - 我确信可以通过将这些行批处理在一起来加快速度,但是如果没有关于您的应用程序可以做什么的任何信息,那么推测这一点似乎没有多大意义。>
最终这将受到磁盘速度的限制;如果您的磁盘可以管理 50MiB/s 的持续写入,那么写入 450MiB 将需要大约 9 秒 - 这听起来就像我的笔记本电脑正在逐行写入
如果我一次写入 100 个字符串 write(the_text*100)
/100 次,即 range(100000),这需要约 6 秒,加速 2.5 倍,写入速度约 70MiB/s
如果我使用 range(10000) 一次写入 1000 个字符串,这需要大约 4 秒 - 我的笔记本电脑开始以大约 100MiB/s 的速度达到顶峰。
我使用 write(the_text*100000)
获得了大约 125MiB/s。
进一步增加到 write(the_text*1000000)
会减慢速度,大概是字符串的 Python 内存处理开始需要相当长的时间。
进行文本输入/输出会稍微减慢速度 - 我知道使用 Python 我可以对二进制文件进行大约 300MiB/s 的组合读写。
总结:对于 27GiB 文件,我的笔记本电脑在 Windows 10 上运行 Python 3.9.5 的最大速度约为 125MiB/s 或 8s/GiB,因此在以大约 4.5 的块写入字符串时,创建文件需要大约 202 秒MiB(45 个字符*100,000)。赞一个
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。