Carsten 发表于 2020-6-27 10:39:03

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

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是读取行
有点不解

小甲鱼的铁粉 发表于 2020-6-27 10:41:32

这个line1也是一行一行的读取的,l每个ine1读取到回车字符会结束,所以它也是一行一行的

小甲鱼的铁粉 发表于 2020-6-27 10:42:51

如果像一个字符一个字符读取的话需要
for line1 in f1:
    for each in line1:
这样的话才是一个字符一个字符读取的

小甲鱼的铁粉 发表于 2020-6-27 10:43:31

文件这一块的操作很多都是需要去记住的,学到后面会发现文件这一块是非常有趣的,加油{:10_275:}

Carsten 发表于 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

Carsten 发表于 2020-6-27 10:44:45

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

我刚刚试了一下是这样子的,是哪里出错了吗{:10_266:}

小甲鱼的铁粉 发表于 2020-6-27 10:46:52

Carsten 发表于 2020-6-27 10:44
我刚刚试了一下是这样子的,是哪里出错了吗

我看一下哈

Carsten 发表于 2020-6-27 10:53:02

小甲鱼的铁粉 发表于 2020-6-27 10:46
我看一下哈

好像是我之前的file是直接赋值的,并不是真正的文件。所以是这样吗?对于文件使用 for lines in 是一行行提取的,对于字符串是一个个提取的。

Twilight6 发表于 2020-6-27 10:53:34

Carsten 发表于 2020-6-27 10:44
我刚刚试了一下是这样子的,是哪里出错了吗



你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的

小甲鱼的铁粉 发表于 2020-6-27 10:53:45

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

是的

小甲鱼的铁粉 发表于 2020-6-27 10:56:08

Twilight6 发表于 2020-6-27 10:53
你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的

t6,你看一下楼主的这个代码对吗?我看不出来

Carsten 发表于 2020-6-27 10:56:51

Twilight6 发表于 2020-6-27 10:53
你这个是遍历字符串啊,只有遍历文件对象才是一行一行读取的

嗯嗯,对我搞错了,我弄了个文件就一行行了

Twilight6 发表于 2020-6-27 10:58:50



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

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

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

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


Twilight6 发表于 2020-6-27 10:59:35

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

楼主的这个是课后答案吧{:10_297:}

小甲鱼的铁粉 发表于 2020-6-27 11:02:03

Twilight6 发表于 2020-6-27 10:59
楼主的这个是课后答案吧

嗯{:10_297:}

小甲鱼的铁粉 发表于 2020-6-27 11:03:23

Twilight6 发表于 2020-6-27 10:59
楼主的这个是课后答案吧

有一个新帖,是有关类的,我也看不懂,你去看一下吧,类我快迷死了{:10_269:}

Twilight6 发表于 2020-6-27 11:38:34

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

嘿嘿答完了 你也可以去 理解下
页: [1]
查看完整版本: 小白求助求助!!关于for lines in str的问题