【问题标题】:How would you process 1GB of text data?你将如何处理 1GB 的文本数据?
【发布时间】:2010-09-26 11:30:25
【问题描述】:

任务: 处理 3 个接近 1GB 大小的文本文件并将它们转换为 csv 文件。源文件具有自定义结构,因此正则表达式会很有用。

问题: 没有问题。我为此使用了php,这很好。我实际上并不需要更快地处理文件。我只是好奇你会如何解决这个问题。最后,我希望看到可能比 php 执行得更快的简单方便的解决方案。

@felix 我很确定。 :) 如果我完成了整个项目,我可能会将其发布为跨语言代码乒乓球。

@标记 我的方法目前就是这样工作的,除了我缓存了几百行以保持文件写入低。一个经过深思熟虑的内存权衡可能会挤出一些时间。但我确信到目前为止,其他方法可以击败 php,例如充分利用 *nix 工具集。

【问题讨论】:

  • 我想看看你的 PHP 解决方案。
  • 为什么不展示您预期的输入和输出的样本?

标签: php regex text


【解决方案1】:

首先,您为此使用哪种语言可能并不重要,因为它可能会受到 I/O 限制。更重要的是您使用有效的方法/算法。特别是,如果可能,您希望避免将整个文件读入内存,并避免在将结果写入磁盘之前将其连接成一个巨大的字符串。

改为使用流式方法:读取一行输入,对其进行处理,然后写入一行输出。

【讨论】:

    【解决方案2】:

    我会联系sed

    【讨论】:

      【解决方案3】:

      我将如何处理您询问的大量文本数据? perl -p 's/regex/magic/eg'(或一些类似/更复杂的变体)。

      它非常适合这项工作,不包括需要极快的最高性能的罕见情况(几乎所有脚本语言都失败了)。

      它广泛可用、快速且简洁。我正在向几位同事教授 perl,他们似乎对它可以在一两行代码中执行的看似神奇的壮举感到持续的敬畏。开个玩笑,在保持可读性的同时做到这一点是完全可行的(假设您对该语言有合理的理解,并且不希望为未来的维护者创造地狱)。

      【讨论】:

        【解决方案4】:
        【解决方案5】:

        Perl 是文本处理的古老大师,这是有充分理由的。我相信 Perl 的许多优势在今天的 Python 中都可以找到,而且是以一种更易于访问的方式,所以当涉及到文本解析时,我通常会使用 Python(我之前用 Python 解析过 GB 文件)。

        AWK 或 sed 也可能快如闪电,但不像 Perl och Python 那样易于扩展。在您的特定情况下,您不想做的不仅仅是解析和重新格式化输出,但如果您想做更多,那么已经使用 Perl/Python 会更容易。

        我真的找不到反对 Python 和其他东西的论据,所以我想这就是我的建议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-09
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          • 2010-09-18
          • 1970-01-01
          相关资源
          最近更新 更多