python开发学习day10 (文件指针; 文本修改)

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)方式二原理:

①  将文件中的数据一行一行读进内存进行修改
②  将修改完成的数据一次一次地写进另一个新文件内
③ 将原文件“删除”,再将新文件重命名为原文件 优点:不费内存,同一时刻在内存中只有一行内容 缺点:费硬盘,在修改过程中硬盘上会同时存放两份数据
原文地址:https://www.cnblogs.com/cui-cheng/p/13110368.html