我有2个文件(1个旧文件和1个新文件),它们具有我需要比较的相同结构,然后返回新列表唯一的数据。
每个文件都是TAB分隔的,看起来像这样(每个长约16k行):
8445 200807
8345 200807
ect. ect.
我对使用循环进行比较有基本的了解,但我不确定如何将相应的数据列与其他2个相应的列进行比较。
编辑:对不起,我想要的结果有些混乱。所以,如果我这是我的旧文件:
8445 200807
8345 200807
这是我的新文件:
8445 200807
8445 200809
我希望脚本返回:
8445 200809
因此该对必须是新文件的唯一。如果这是有道理的。
答案 0 :(得分:2)
这是我能想到的最直接的方式。纯粹主义者可能会抱怨它不使用with声明,因此请注意。
def compare_files()
f1 = open('old')
f2 = open('new')
d1 = set()
for line in f1:
d1.add(line)
for line in f2:
if not line in d1:
yield line
并像这样使用它:
for line in compare_files():
print "not in old", line,
答案 1 :(得分:0)
我猜你想要什么:两个文件共有的一组行。这是两个文件的交集,即
with open("file1") as f1, open("file2") as f2:
rows1 = set(ln.split() for ln in f1)
rows2 = set(ln.split() for ln in f2)
for row in rows1 & rows2:
print("\t".join(row))
但这会改变行的顺序。如果您想要仅出现在第一个文件中的行,请将&
替换为-
。