我有以下表格的2个文件:
file1:
work1
7 8 9 10 11
1 2 3 4 5
6 7 8 9 10
file2:
work2
2 3 4 5 5
2 4 7 8 9
work1
7 8 9 10 11
1 2 4 4 5
6 7 8 9 10
work3
1 7 8 9 10
现在我想比较文件和标题(work1)相等的地方..我想比较后续部分并打印找到差异的行。 E.g。
work1 (file1)
7 8 9 10 11
1 2 3 4 5
6 7 8 9 10
work1 (file2)
7 8 9 10 11
1 2 4 4 5
6 7 8 9 10
现在我要打印出现差异的行,即“1 2 4 4 5”
为此,我编写了以下代码:
with open("file1",) as r, open("file2") as w:
for line in r:
if "work1" in line:
for line1 in w:
if "work1" in line1:
print "work1"
然而,从这里开始,我很困惑,我怎么能平行地阅读这两个文件。有人可以帮我解决这个问题......因为我在比较“work1”之后没有得到,我应该如何并行阅读文件
答案 0 :(得分:1)
你可能想在Python中试用itertools
模块。
它包含一个名为izip
的函数,它可以执行您需要的操作,以及一个名为islice
的函数。您可以遍历第二个文件,直到找到所需的标题,然后可以将标题切片。
这是一些代码。
from itertools import *
w = open('file2')
for (i,line) in enumerate(w):
if "work1" in line:
iter2 = islice(open('file2'), i, None, 1) # Starts at the correct line
f = open('file1')
for (line1,line2) in izip(f,iter2):
print line1, line2 # Place your comparisons of the two lines here.
现在你可以保证,在循环的第一次运行中,你将在两行上获得“work1”。之后你可以比较。由于f
比w
短,迭代器会耗尽自己并在f
结束后停止。
希望我能解释清楚。
编辑:添加了导入声明。
编辑:我们需要重新打开file2。这是因为在Python中迭代遍历迭代会消耗iterable。所以,我们需要将一个全新的版本传递给islice
,这样才有效!
答案 1 :(得分:0)
with open('f1.csv') as f1, open('f2.csv') as f2 :
i=0
break_needed = False
while True :
r1, r2 = f1.readline(), f2.readline()
if len(r1) == 0 :
print "eof found for f1"
break_needed = True
if len(r2) == 0 :
print "eof found for f2"
break_needed = True
if break_needed :
break
i += 1
if r1 != r2 :
print " line %i"%i
print "file 1 : " + r1
print "file 2 : " + r2