【问题标题】:Is there a way to parallelly read GB size text files using python script loading in to RAM as chunks? [duplicate]有没有办法使用 python 脚本作为块加载到 RAM 中并行读取 GB 大小的文本文件? [复制]
【发布时间】: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


【解决方案1】:

分别读取每一行 用这个

with open("sample.txt") as infile:
    for line in infile:
        do_something_with(line)

单独阅读每一行

【讨论】:

  • 你真的希望 Python 脚本比 sed 这样的低级 C 程序更快吗?
  • @Benyamin Karimi 我需要阅读所有文本文件,而不是特定文件。那么脚本会是什么呢?
  • 这个好像抄袭自stackoverflow.com/a/6475407/874188
  • @SandunDayananda 我认为文件的数量不会影响他们解决方案的有效性。
  • 或者我应该说,“他们的”解决方案@tripleee
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2013-08-15
  • 2020-03-02
  • 2011-12-10
相关资源
最近更新 更多