好名字容易忘 发表于 2020-8-6 22:04:08

零基础29讲课后题

0. def file_write(file_name):
    f = open(file_name, 'w')
    print('请输入内容【单独输入\':w\'保存退出】:')

    while True:
      write_some = input()
      if write_some != ':w':
            f.write('%s\n' % write_some)
      else:
            break

    f.close()

file_name = input('请输入文件名:')
file_write(file_name)

大佬们,第8行 ‘\n’ 是为什么加呢,是为了在输入的时候让每一行结尾换行吗

1. 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)

这里的line1是一行一行遍历的吗?一般情况下不应该是一个一个过吗

3. for i in range(begin):# 用于移动文件指针到我们设定的那一行,也就是消耗掉前面不需要的行数
      f.readline()
这里移动指针时,按行移动用readline,按范围移动用seek吗

sunrise085 发表于 2020-8-6 22:06:44

本帖最后由 sunrise085 于 2020-8-6 22:09 编辑

你对这三个问题的理解都是对的
0.向文件写内容的时候,不会自动添加换行符,所以需要在自己需要的位置添加'\n'
for line1 in f1:
1.这种写法就是一行一行的遍历,不是一个字符一个字符的遍历
3.seek一般只用于移动光标到文件起始位置或者文件末尾。很少用于中间移动,因为不同的文件编码不同,按照字节移动很容易出错。

zltzlt 发表于 2020-8-6 22:08:38

1. 是因为如果不换行,添加到文件的内容就会成一排文字,看着比较难受

2. line1 是一行一行遍历,不是一个字符一个字符地遍历。这是文件对象的规定,暂时只要知道这个就行了

3. 也可以这么理解

Twilight6 发表于 2020-8-7 00:14:23



大佬们,第8行 ‘\n’ 是为什么加呢,是为了在输入的时候让每一行结尾换行吗?

是的,在写入文件中换行,否则你写入的文件内容都会在一行,而不会换行

这里的line1是一行一行遍历的吗?一般情况下不应该是一个一个过吗?

嗯,这里通过一起比较行即可比较出不的数量,而且你要知道 for 循环一个文件对象时候是按行读取文件对象的内容的

所以这里一个通过 for 循环每次读取一行,一个是在for 循环内每次读取一行

则两个的行数都是一起增加的,所以读取的行数也是相同的,你读取到第三行,我也一样读取到第三行

3. for i in range(begin):# 用于移动文件指针到我们设定的那一行,也就是消耗掉前面不需要的行数
      f.readline()
这里移动指针时,按行移动用readline,按范围移动用seek吗

你这里应该指的是读取指定行那题课后题,当你读取文件内容时候,文件指针就会进行移动,这里用 for 循环配合 f.readline() 函数将前面几行先读取掉

那么文件指针就移动到你 begin 的那行开头了,所以这里 readline 起到了按行移动文件指针的作用

实际上 for 直接循环文件对象也可以直接移动文件指针而且也是按行的,而 seek 是准确来说是按照字节来移动的哈~

页: [1]
查看完整版本: 零基础29讲课后题