鱼C论坛

 找回密码
 立即注册
查看: 1369|回复: 2

[已解决]Python 29讲的课后题,求解惑

[复制链接]
发表于 2020-7-12 10:25:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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

最佳答案
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() 也会将文件指针移动到下一行开头

这样就达到了依次比较行差异的效果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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() 也会将文件指针移动到下一行开头

这样就达到了依次比较行差异的效果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 10:29:03 | 显示全部楼层
    for line1 in f1: --依次读取f1的每一行
        line2 = f2.readline()  --依次读取f2的每一行
即每次循环读取f1的第一行,f2的第一行,继续比较,读取f1的第二行,f2的第二行,继续比较......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表