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

Python:将一个文本文件中的正则表达式模式与另一个文本文件中的行进行比较,python,regex,Python,Regex,这适用于较小的文本文件,但不适用于较大的文本文件。(100000行) 如何优化大型文本文件? 对于文件A中的行,如果regexpatern==文件B中的行,则将文件A中的行(整行)写入文件C import re with open('fileC.txt', 'w') as outfile: with open('fileA.txt', 'rU') as infile1: for line1 in infile1: y = re.findall(r

这适用于较小的文本文件,但不适用于较大的文本文件。(100000行) 如何优化大型文本文件? 对于文件A中的行,如果regexpatern==文件B中的行,则将文件A中的行(整行)写入文件C

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)

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

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

# 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
#忽略有关重复行处理的详细信息
#为了解释清楚。
rai=排序([7,6,1,9,11,6])
raj=已排序([4,6,11,7])
i、 j=0,0
而iraj[j]:j+=1
其他:
#我用mod代替了你的正则表达式的测试
#因为你没有提供数据
if mod(rai[i],2):打印rai[i]
i、 j=i+1,j+1

好的。但问题是什么?对于文件A中的每一行,您都在循环文件B中的每一行。如果A中有100000行,B中有100000行,则您正在执行100亿次操作。这需要一段时间…谢谢。添加了一个问题。一个选项是读取fileB并使用md5对每一行进行哈希,并将所有行存储在内存中,然后从fileA中提取内容,并将哈希与fileB中的哈希进行比较。如果它们是相同的,那么它们的内容极有可能是相同的。我建议您在提问时,提供一个示例输入数据和所需输出数据的小示例。谢谢。正则表达式匹配fileA中整行中的模式。当该模式在fileB中匹配时,期望的结果是从fileA写入整个行(而不仅仅是匹配的模式)。没问题。要从
fileA
跟踪整行,您可以更新上面的代码,使
rai
成为一个匹配数组。根据重复项的不同,您可能还需要从匹配项到匹配行的散列。您仍然希望排序
fileB
以删除O(n^2)操作。