比较Python中的两个.text文件,并将精确和类似的匹配保存到.txt文件中

时间:2011-07-07 15:39:23

标签: python compare pattern-matching intersection file-comparison

我需要的是:

text_file_1.txt:
apple
orange
ice
icecream

text_file_2.txt:
apple
pear
ice

当我使用“set”时,输出将为:

apple
ice

(“相当于re.match”)

但我想得到:

apple
ice
icecream

(“相当于re.search”)

有什么方法可以做到这一点吗?文件很大,所以我不能只是迭代它并使用正则表达式。

2 个答案:

答案 0 :(得分:2)

您可能需要查看difflib

答案 1 :(得分:2)

如果你想要的只是从文件中提取单词的一个子串(包括那些相同的子串),你可以这样做:

fone = set(['apple', 'orange', 'ice', 'icecream'])
ftwo = set(['apple' ,'pear' ,'ice'])
# transforming to sets saves to check twice for the same combination

result = []
for wone in fone:
    for wtwo in ftwo:
        if wone.find(wtwo) != -1 or wtwo.find(wone) != -1:
            result.append(wone)
            result.append(wtwo)
for w in set(result):
    print w

或者,如果你想根据字母顺序排列字符串的相似性,你可以按照Paul的建议使用difflib提供的类之一:

import difflib as dl

fone = set(['apple', 'orange', 'ice', 'icecream'])
ftwo = set(['apple' ,'pear' ,'ice'])

result = []
for wone in fone:
    for wtwo in ftwo:
        s = dl.SequenceMatcher(None, wone, wtwo)
        if s.ratio() > 0.6:  #0.6 is the conventional threshold to define "close matches"
            result.append(wone)
            result.append(wtwo)
for w in set(result):
    print w

我没有对两个样本中的任何一个进行计时,但我猜第二个样本会运行得慢得多,因为对于每对夫妇,你必须实例化一个对象......