希望找到解决方案,我失去了几天却没有成功!我有两个包含许多行的文本文件。一个文件可以包含数千行数字,例如: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
答案 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()))