2020-06-12
目录:
一、控制文件指针移动
1.1 文件指针移动的单位
1.2 主动/单纯控制指针的移动
二、文本的修改
一、控制文件指针移动
1.1 文件指针移动的单位
只有在t模式下的read(n)中,n指的是字符个数 其余所有的主动/被动的文件指针移动都是以bytes为单位 如: with open(r'a.txt', mode = 'rt', encoding = 'utf-8') as f: f.read(2) # 这里的2指的是2个字符
1.2 主动/单纯控制指针的移动 f.seek(x,y)
f.seek(x,y)中,x指移动字节的个数,y代表模式(有0,1,2三种模式)
① 0模式:参照物是文件的开头,可以在t、b模式下使用
with open('d.txt', mode='rt', encoding='utf-8') as f: f.seek(3, 0) print(f.tell()) # >>>3 f.tell()是计算从文件开头算起,当前指针的位置
② 1模式:参照物为当前位置,只能在b模式下使用
with open('d.txt', mode='rb') as f: f.read(1) print(f.tell()) # 当前位置 f.seek(2,1) # 在当前位置往后移动2个字节 print(f.tell())
③ 2模式:参照物为文件末尾,只能在b模式下使用
with open('d.txt', mode='rb') as f: f.seek(-3, 2) # 指针移动到倒数第三个字符 print(f.tell())
二、文本的修改
硬盘的数据没有改的概念,所谓的修改都是以新数据覆盖旧的数据来实现改变的
文件可以被修改,但是都是靠内存模拟实现的
具体来讲,有两种方法可以实现文件的修改操作
(1)方式一原理:
① 将硬盘的内容全部读入内存
② 在内存中实现将内容一次性修改完毕
③ 将修改完的内容重新覆盖回原文件
优点:不费硬盘,硬盘数据只有一份
缺点:费内存,当文件过大时内存占用过大
(2)方式二原理:
① 将文件中的数据一行一行读进内存进行修改
② 将修改完成的数据一次一次地写进另一个新文件内
③ 将原文件“删除”,再将新文件重命名为原文件
优点:不费内存,同一时刻在内存中只有一行内容
缺点:费硬盘,在修改过程中硬盘上会同时存放两份数据