-1

为了找到解决方案,我输了几天但没有成功!我有两个多行的文本文件。一个文件可以包含数千行数字,例如: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

4 回答 4

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)
于 2013-05-31T16:06:17.973 回答
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

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

于 2013-05-31T15:34:52.190 回答
0

好吧,如果我是你,我会将这些文件加载​​到两个列表中,然后遍历其中一个,在第二个中查找每个值。

于 2013-05-31T15:35:38.117 回答
0

如果文件足够小以加载到内存中,则可以选择集合

with open('firstfile.txt') as f1, open('second_file.txt') as f2:
    print '\n'.join(set(f2.read().splitlines()).difference(f1.read().splitlines()))
于 2013-05-31T16:32:36.103 回答