比较2个文件一行
行我有2个文件的格式如下:比较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)是equal..I要比较的后续部分并打印找到差异的行。例如。
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”的应该怎么读取文件平行
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
你可能会想尝试在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中迭代迭代器会消耗迭代器。所以,我们需要通过一个全新的islice
,所以它的工作原理!
'islice(w,i,None,1)'从文件当前位置开始跳过'i'行。 – 2013-03-24 19:02:42
@AVP感谢您的回复......请您解释“islice”的功能。其实它给我错误..名字'islice'没有定义。另外我已经导入itertools..still我不知道为什么它会抛出错误 – user1778824 2013-03-24 19:07:16
你在做itertools.islice或者你在做islice吗? 第二个只有在你的import语句是“from itertools import *”时才能工作,而第一个会在你执行“import itertools”时工作。 – AVP 2013-03-24 19:12:02
读入内存(每个r.read()和w.read()到一个变量),然后做比较。并行不是正确的词。 – CppLearner 2013-03-24 18:17:22
CppLearner该方法是可行的,只有当我的文件不大的大文件的方法是不可行的 – user1778824 2013-03-24 18:19:32
好点。那么,如果你确定像'work1'这样的头文件不会在同一个文件中重复出现,那么你可以打开这个文件并且读取出现子字符串的位置,然后结束并且出现下一个头文件。将它们记录在两个文件中然后阅读。我不知道性能如何与这两个文件读入同一个迭代器相比较http://*.com/questions/3322419/iterate-across-lines-in-two-files-simultaneously-in-python。 – CppLearner 2013-03-24 18:33:36