鱼C论坛

 找回密码
 立即注册
查看: 1275|回复: 3

[已解决]零基础29讲课后题

[复制链接]
发表于 2020-8-6 22:04:08 | 显示全部楼层 |阅读模式

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

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

x
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吗
最佳答案
2020-8-6 22:06:44
本帖最后由 sunrise085 于 2020-8-6 22:09 编辑

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

使用道具 举报

发表于 2020-8-6 22:06:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-8-6 22:09 编辑

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

使用道具 举报

发表于 2020-8-6 22:08:38 | 显示全部楼层
1. 是因为如果不换行,添加到文件的内容就会成一排文字,看着比较难受

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

3. 也可以这么理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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 是准确来说是按照字节来移动的哈~

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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