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')

浙公网安备 33010602011771号