我是Python的初学者,我想比较两个文件。这是我的想法:逐行比较两个文件,并将它们写入第三个文件,区别对比。然后我想让输出更清楚,我首先比较每个文件的行号,但我发现在for循环之后,第三个文件是结果一个是空白的。如果我为两个文件删除for循环就可以了。这是脚本:
import difflib
import sys
with open('file1','r') as file1:
with open ('file2','r') as file2:
line_num1=sum(1 for line in file1)
line_num2=sum(1 for line in file2)
diffInstance = difflib.Differ()
diffList = list(diffInstance.compare(file1.readlines(), file2.readlines()))
with open ('result', 'w') as result:
for i,line in enumerate(diffList):
result.write(line)
if line_num1 == line_num2:
if line.startswith('+'):
sys.stdout.write('Current-Line: {}, text: {}'.format(i-1,line))
elif line.startswith('-'):
sys.stdout.write('Previous-Line: {}, text: {}'.format(i+1,line))
elif line_num1 > line_num2:
x = line_num1-line_num2
elif line_num1<line_num2:
y = line_num2-line_num1
答案 0 :(得分:0)
Charles Duffy的评论非常有用。但是,由于这些行,您的输出是空白的,因为它们尝试两次读取文件的内容:
line_num1=sum(1 for line in xmlfile1)
line_num2=sum(1 for line in xmlfile2)
diffList = list(diffInstance.compare(xmlfile1.readlines(), xmlfile2.readlines()))
要计算line_num1
,您正在读取xmlfile1
中的每一行,这意味着存储在xmlfile1
中的文件对象将指向文件的末尾。然后,您尝试使用xmlfile1.readlines()
再次阅读它,但xmlfile1
没有更多行要读取,因为它指向文件的末尾。
保留尽可能多的现有代码,要调用的方法是seek()
,我们可以指示使用0
返回文件的开头:
line_num1=sum(1 for line in xmlfile1)
line_num2=sum(1 for line in xmlfile2)
xmlfile1.seek(0)
xmlfile2.seek(0)
diffList = list(diffInstance.compare(xmlfile1.readlines(), xmlfile2.readlines()))