你将如何处理1GB的文本数据?

时间:2010-09-26 11:30:26

标签: php regex text

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

问题: 没有问题。我使用PHP,它没关系。我实际上并不需要更快地处理文件。我只是好奇你将如何处理这个问题。最后,我希望看到简单方便的解决方案,可能比php更快。

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

@马克 我的方法目前就是这样的,除了我缓存几百行以保持低文件写入。通过记忆权衡的深思熟虑可能会挤出一段时间。但我相信其他方法可以胜过PHP,就像完全利用* nix工具集一样。

5 个答案:

答案 0 :(得分:6)

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

而是使用流方法:读取一行输入,处理它,然后写一行输出。

答案 1 :(得分:1)

我要到达sed

答案 2 :(得分:1)

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

这对于这项工作来说非常完美,排除了需要最绝对超快的最高性能的罕见情况(几乎所有脚本语言都失败)。

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

答案 3 :(得分:0)

答案 4 :(得分:0)

Perl是文本处理的老大师,有充分的理由。我认为Perl的很多优点现在都可以在Python中找到,但是以更易于访问的方式,所以当涉及到文本解析时,我通常会运行到Python(我以前用Python解析过GB文件)。

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

我无法真正找到反对Python与其他东西的争论,所以我猜这是我的建议。