Python学习心得第三周-04 文件管理--指针移动和修改文件

文件内指针操作(掌握):
f.seek:
第一个参数:控制移动的字节数
第二个参数:控制移动的参照物,值可以为0、1、2

0:参照文件开头(在b和t模式都能用)
强调:除了0模式以外模式都只能在b模式下使用,即1和2模式只能用在b模式下
with open('e.txt',mode='rt',encoding='utf-8') as f:
    # f.seek(6,0) # 单位是字节
    # print(f.read())
    f.read()
    f.seek(0,0)
    print('第二次',f.read())

1: 参照当前位置(只能在b模式下用)
储备:read(n)
read的n在t模式下代表的是字符个数
read的n在b模式下代表的是字节个数
其余所有文件内指针的移动都是以字节为单位
with open('e.txt',mode='rt',encoding='utf-8') as f:
    data=f.read(2)
    print(data)

with open('e.txt',mode='rb') as f:
    data=f.read(3)
    print(data.decode('utf-8'))

with open('e.txt',mode='rb') as f:
    s=f.read(3) # 指针在第3个bytes
    # print(s)
    # print(f.tell())
    # f.seek(6,0)
    f.seek(3,1)
    print(f.read())

2:参照文件末尾(只能在b模式下用)
with open('e.txt',mode='rb') as f:
    f.seek(-6,2)
    print(f.read())


with open('e.txt','r+t',encoding='utf-8') as f:
    f.truncate(9) # 从文件开头截取到3bytes的位置,其余的删除

  

修改文件

文本编辑器修改文件的原理:
1、先将文件内容全部读入内存
2、在内存中修改完毕
3、将修改的结果覆盖写回硬盘

优点:在修改期间硬盘上同一时刻只有一份数据
缺点:占用内存过高
with open('db.txt',mode='rt',encoding='utf-8') as f:
    data=f.read()
    new_data=data.replace('alex','alexdsb')
    print(new_data)

with open('db.txt',mode='wt',encoding='utf-8') as f:
    f.write(new_data)
一行一行的读,一行一行的改:
1、以读的模式打开源文件,以写的模式打开一个临时文件
2、然后用for循环读取原文件一行行内容,每读一行则修改一行,将修改的结果写入临时文件,直到把源文件都遍历完
3、删除原文件,将临时文件重命名为原文件名

优点:同一时刻在内存中只存在文件的一行内容
缺点:在修改期间硬盘上同一份数据会保存两份
import os

with open('db.txt',mode='rt',encoding='utf-8') as src_f,
        open('.db.txt.swap',mode='wt',encoding='utf-8') as temp_f:
    for line in src_f:
        if 'alex' in line:
            line=line.replace('alex','alexdsb')
        temp_f.write(line)

os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')

  

 
原文地址:https://www.cnblogs.com/zhutiancheng/p/9323676.html