Python - for循环后输出为空白

时间:2017-05-08 22:52:26

标签: python

我是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

1 个答案:

答案 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()))