2个未知大小的文本文件之间的区别

时间:2013-05-31 15:30:41

标签: python

希望找到解决方案,我失去了几天却没有成功!我有两个包含许多行的文本文件。一个文件可以包含数千行数字,例如:79357795 79357796 68525650

第二个文件也包含数字,但不能太多,也许是一百行(每行一个数字)。我尝试了一些“算法”但没有成功。现在,我的问题是:我可以检查第一个文件的第一行,第二个文件中的所有行,之后,检查第一个文件的第二行,第二个文件中的所有行,依此类推,直到文件末尾?因此,我想在第三个文件中保存这两个文件之间的差异。谢谢大家的回复,对不起我最糟糕的英语。 :)

PS:哦,是的,我需要在Python中这样做。

更多细节: first_file.txt包含:

79790104
79873070
69274656
69180377
60492209
78177852
79023241
69736256
68699620
79577311    
78509545
69656007
68188871
60643247
78898817
79924105
79684143    
79036022
69445507
60605544
79348181
69748018
69486323
69102802
68651099

second_file.txt包含:

78509545    
69656007    
68188871    
60643247
78898817    
79924105    
79684143    
79036022    
69445507
60605544    
79348181    
69748018    
69486323    
69102802
68651099
79357794
78953958
69350610
78383111
68629321
78886856

third_file.txt需要包含first_file.txt中不存在的数字,但是存在于第二个文件中,在这种情况下:

79357794
78953958
69350610
78383111
68629321
78886856

4 个答案:

答案 0 :(得分:2)

类似的东西:

from itertools import ifilterfalse

with open('first') as fst, open('second') as snd, open('not_second', 'w') as fout:
    snd_nums = set(int(line) for line in snd)
    fst_not_in_snd = ifilterfalse(snd_nums.__contains__, (int(line) for line in fst))
    fout.writelines(num + '\n' for num in fst_not_in_snd)

答案 1 :(得分:0)

编辑:这将为您提供两个列表中的所有数字(这是您最初要求的数字。)查看数据集所需内容的其他答案。 (我喜欢1_CR的答案。)

with open('firstfile.txt') as f:
    file1 = f.read().splitlines()

with open('secondfile.txt') as f:
    file2 = f.read().splitlines()

for x in file1:
    for y in file2:
        if x == y:
            print "Found matching: " + x
            #do what you want here

它可以提高效率,但文件听起来不那么大,这是最简单的方法。

答案 2 :(得分:0)

好吧,如果我是你,我会将这些文件加载​​到两个lists中,然后迭代其中一个,查找第二个中的每个值。

答案 3 :(得分:0)

如果文件足够小以加载到内存中,则设置是一个选项

with open('firstfile.txt') as f1, open('second_file.txt') as f2:
    print '\n'.join(set(f2.read().splitlines()).difference(f1.read().splitlines()))