高效分析大文本的方案

【问题】

What’s the most efficient way to parse a large text file?

I’m trying to optimize some code. I have to open a large text file, match each line against a regular expression, and then process the results.

I’ve tried the simple approaches:

  
    for line in my_file:  
        match = my_regx.match(line)  
        process( match.groups() )  
  
and  
  
    data = my_file.read().splitlines()  
    for line in data:  
        # etc.  

Neither is terribly speedy. Does anyone have a better method?

【回答】

多线程并行计算可以提高匹配的速度,但 python 的多线程代码比较复杂,而且涉及按字节数对文件分段的问题,处理起来并不轻松。使用 SPL 就简单多了,可将文件 file1.txt 分为多段,每线程计算一段,并用正则表达式匹配出符合条件的行数据,最后合并结果并输出到文件。具体代码如下:


A

1

=file("D:\\file1.txt")

2

=A1.cursor@m(;4).(~.array().concat())

3

=A2.regex(".*smile.*")

4

=file("D:\\result.txt").export(A3)


正则表达式功能强大,但性能不高,如果匹配规则不复杂时,还可以采用性能更高的 like 函数,比如:


A

1

=file("D:\\file1.txt")

2

=A1.cursor@m(;4)

3

=A2.select(like(#1,"*smile*"))

4

=file("D:\\result.txt").export(A5)


集算器还支持丰富的计算函数,比如分组汇总、排名排序、关联计算、多文件查询、归并查找,易于实现各种复杂的算法逻辑。