鱼C论坛

 找回密码
 立即注册
查看: 1493|回复: 16

小白求助求助!!关于for lines in str的问题

[复制链接]
发表于 2020-6-27 10:39:03 | 显示全部楼层 |阅读模式

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

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

x
def file_compare(file1, file2):
    f1 = open(file1)
    f2 = open(file2)
    count = 0 # 统计行数
    differ = [] # 统计不一样的数量
    for line1 in f1:
        line2 = f2.readline()
        count += 1
        if line1 != line2:
            differ.append(count)
    f1.close()
    f2.close()
    return differ
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
differ = file_compare(file1, file2)
if len(differ) == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共有【%d】处不同:' % len(differ))
    for each in differ:
        print('第 %d 行不一样' % each)

这个程序里,我标红的for line1 in f1
这个line1不应该是一个一个字符读取的吗
但是后面的f2.readline是读取行
有点不解

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 10:41:32 | 显示全部楼层
这个line1也是一行一行的读取的,l每个ine1读取到回车字符会结束,所以它也是一行一行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:42:51 | 显示全部楼层
如果像一个字符一个字符读取的话需要
for line1 in f1:
    for each in line1:
这样的话才是一个字符一个字符读取的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:43:31 | 显示全部楼层
文件这一块的操作很多都是需要去记住的,学到后面会发现文件这一块是非常有趣的,加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 10:44:02 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-27 10:41
这个line1也是一行一行的读取的,l每个ine1读取到回车字符会结束,所以它也是一行一行的

>>> file2 = 'abcasdasd\nadsasdasdas\nwaeawewad\n'
>>> for line1 in file2:
        print(line1)

       
a
b
c
a
s
d
a
s
d


a
d
s
a
s
d
a
s
d
a
s


w
a
e
a
w
e
w
a
d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 10:44:45 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-27 10:41
这个line1也是一行一行的读取的,l每个ine1读取到回车字符会结束,所以它也是一行一行的

我刚刚试了一下是这样子的,是哪里出错了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:46:52 | 显示全部楼层
Carsten 发表于 2020-6-27 10:44
我刚刚试了一下是这样子的,是哪里出错了吗

我看一下哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 10:53:02 | 显示全部楼层

好像是我之前的file是直接赋值的,并不是真正的文件。所以是这样吗?对于文件使用 for lines in 是一行行提取的,对于字符串是一个个提取的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-27 10:53:34 | 显示全部楼层
Carsten 发表于 2020-6-27 10:44
我刚刚试了一下是这样子的,是哪里出错了吗



你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:53:45 | 显示全部楼层
Carsten 发表于 2020-6-27 10:53
好像是我之前的file是直接赋值的,并不是真正的文件。所以是这样吗?对于文件使用 for lines in 是一行行 ...

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:56:08 | 显示全部楼层
Twilight6 发表于 2020-6-27 10:53
你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的

t6,你看一下楼主的这个代码对吗?我看不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 10:56:51 | 显示全部楼层
Twilight6 发表于 2020-6-27 10:53
你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的

嗯嗯,对我搞错了,我弄了个文件就一行行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:58:50 | 显示全部楼层


for line1 in f1:
    line2 = f2.readline()


for 循环遍历文件对象时候,是以一行一行读取文件的,而 readline() 方法,也是每次读取文件一行

每次读取完文件指针就会移动到下一行的开头,所以下次读取 readline() 时候,就是下一行呗

这样每次比较的都是 f1 和 f2 的同一行进行比较,f1 下一行 ,f2 也会下一行


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:59:35 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-27 10:56
t6,你看一下楼主的这个代码对吗?我看不出来

楼主的这个是课后答案吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 11:02:03 | 显示全部楼层
Twilight6 发表于 2020-6-27 10:59
楼主的这个是课后答案吧

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
Twilight6 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 11:03:23 | 显示全部楼层
Twilight6 发表于 2020-6-27 10:59
楼主的这个是课后答案吧

有一个新帖,是有关类的,我也看不懂,你去看一下吧,类我快迷死了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 11:38:34 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-27 11:03
有一个新帖,是有关类的,我也看不懂,你去看一下吧,类我快迷死了

嘿嘿  答完了 你也可以去 理解下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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