石页不禾几 发表于 2020-7-12 10:25:29

Python 29讲的课后题,求解惑

Python29讲的课后题中,第二个题,比较文件中的各行内容是否相同。
答案中,在对各行比较时,为什么line1 不需要用f1.readline()得到,而line2则需要用到f2.readline()来得到?

在对各行比较时,为什么不需要指定对应的行进行比较,直接就是第一行和第一行对比,第二行和第二行对比了?我怎么总觉得这样写出来,意思是,第一个文件中的第一行和第二个文件中的每一行都对比了?
请各位小伙伴指点迷津呀~~

def file_comper(file_name1, file_name2):
    f1 = open(file_name1)
    f2 = open(file_name2)
    count = 0
    differ = []
   
    for line1 in f1:
      line2 = f2.readline()
      count +=1
      if line1 != line2:
            differ.append(count)
            
    f1.close()
    f2.close()
    return differ

Twilight6 发表于 2020-7-12 10:28:08

本帖最后由 Twilight6 于 2020-7-12 10:31 编辑



这其实是一样的,当你 for 循环对象时候,是以行为单位来读取文件对象的内容 的

而你 f2.readline() 就是直接对 f2 文件对象读取一行内容

每次 for 循环只拿出一行 f1 文件的内容与 f2.readline() 也拿出一行进行比较

下次循环就从下一行开始,相互比较 f1 和 f2 文件的内容

每次的 for 循环都读取一行的 f1 文件内容,并将文件指针移动到 下一行

而 f2.readline() 也是一样,每次 for 循环 都只调用一次 readline()

所以每次的文件对比也就对比一行,而且每次调用 readline() 也会将文件指针移动到下一行开头

这样就达到了依次比较行差异的效果了

冬雪雪冬 发表于 2020-7-12 10:29:03

    for line1 in f1: --依次读取f1的每一行
      line2 = f2.readline()--依次读取f2的每一行
即每次循环读取f1的第一行,f2的第一行,继续比较,读取f1的第二行,f2的第二行,继续比较......
页: [1]
查看完整版本: Python 29讲的课后题,求解惑