Python:比较一个文本文件中的正则表达式模式与另一个文本文件中的行

时间:2015-02-12 06:55:48

标签: python regex

这适用于较小的文本文件,但不适用于较大的文本文件。 (100,000行) 如何针对大文本文件进行优化? 对于fileA中的行,如果regexPattern == fileB中的行将fileA中的(整个)行写入fileC。

import re

with open('fileC.txt', 'w') as outfile:
    with open('fileA.txt', 'rU') as infile1:
        for line1 in infile1:
            y = re.findall(r'^.+,.+,(.+\.[a-z]+$)', line1)
                with open('fileB.txt', 'rU') as infile2:
                    for line2 in infile2:
                        if line2.strip() == y[0]:
                            outfile.write(line1)

1 个答案:

答案 0 :(得分:0)

最直接的优化是只将fileB.txt读入字符串缓冲区一次,然后将匹配表达式的测试应用于该字符串缓冲区。您目前正在为fileA.txt的每一行打开并阅读该文件一次。

您的正则表达式似乎会选择与模式匹配的整行,即它以^开头,以$结尾。在这种情况下,更完整的解决方案是使用fileA.txtfileB.txtreadlines()加载到数组中,对这些数组进行排序,然后通过两个计数器单次传递两个文件,例如:

# Details regarding the treatment of duplicate lines are ignored
# for clarity of exposition.
rai = sorted([7,6,1,9,11,6])
raj = sorted([4,6,11,7])
i, j = 0, 0
while i < len(rai) and j < len(raj):
    if   rai[i] < raj[j]: i += 1
    elif rai[i] > raj[j]: j += 1
    else:
        # I used mod in lieu of testing for your regex
        # since you didnt supply data
        if mod(rai[i],2): print rai[i]
        i, j = i + 1, j + 1