【发布时间】:2020-05-08 07:58:19
【问题描述】:
有一个包含 Gb 大小的文本文件的文件夹(其中大多数大于 30 Gb),我需要阅读它们并将 " 替换为 *。我使用 sed 命令来执行此操作。但它非常慢。如何使用 python 脚本来做。有没有办法在 RAM 中并行处理它们?
【问题讨论】:
-
sed是一个基础的 Unix 工具。所以它有一个简单的命令行界面,一个很小的内存占用,而且非常快。这里的瓶颈是什么?如果磁盘 IO 是答案,我无法想象会有高收益。 -
我同意@SergeBallesta,如果 Python 解决方案同样快,我会感到非常惊讶。
-
@AMC - 等待任务,Python 可以比
sed快很多很多倍,因为它不限于行缓冲区。在字符替换等简单操作中,瓶颈不是处理而是 I/O,如果您可以从 FS 一次加载整个块大小,您将避免昂贵的 IO 操作。例如:stackoverflow.com/a/47910742/7553525 -
我认为使用 C 或 C++ 来执行此操作可能比 sed 或任何 python 库更快。你可以wrap the C code in python。由于您需要做的只是用另一个 char 替换一个 char 并且 sed 在替换文本时可能会做一些其他的事情,所以您的 C 代码可能会比 sed 更快。
标签: python linux text multiprocessing