seek方法实用案例与改变文件的两种方式
一、seek方法实用案例
监控文件的追加:
import time
with open('access.log', mode='rb') as f:
f.seek(0, 2) #将文件指针移动到末尾
while True:
line = f.readline()
if line: #读到内容让其解码后打印
print(line.decode('utf-8'), end='')
else: #读不到停0.3秒再进行读循环
time.sleep(0.3)
往文件末尾追加内容:
with open('access.log', mode='at', encoding='utf-8') as f:
f.write('当前颜值:1111ml\n')
二、修改文件的两种方式
方式一:文本编辑采用的方式
实现的原理:打开文件或将文件一次性全读入内存,在内存中修改完后,再重新也写模式打开文件,清空文件之前存在硬盘里的内容,然后将内存中改好的内容重新写入硬盘。
a.txt文件内容:
abc ABC
ABC abc
abc ABC
ABC abc
with open('a.txt',mode='rt',encoding='utf-8') as f:
res=f.read()
data=res.replace('ABC','abc')
with open('a.txt',mode='wt',encoding='utf-8') as f1:
f1.write(data)
#结果:
'''
abc abc
abc abc
abc abc
abc abc'''
优点:
对硬盘来说,在文件修改的过程中,硬盘只有一个文件(a.txt),省了硬盘的储存空间
缺点:
对内存来说,当文件过大使,因为需要一次将所有数据读到内存中去,所以会过多的占用内存
————》省硬盘空间,可能会造成内存过度的占用
方式二:
实现原理:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
需要调用os模块
a.txt文件内容:
上中下
上中下
上中下
import os
with open('a.txt', mode='r', encoding='utf-8') as f, \
open('.a.txt', mode='w', encoding='utf-8') as f1:
for line in f:
f1.write(line.replace('上中下', '优良差'))
os.remove('a.txt')
os.rename('.a.txt', 'a.txt')
#结果:
'''
优良差
优良差
优良差'''
优点:对内存来说,每次只读原文件中的一行,然后写入临时文件中去,同一时间内存中只读入一行内容,不会占用过多的内存
缺点:对硬盘来说,以为临时文件的原因,会多占用一份硬盘的储存空间。
-
具体用那种方式,看情况、看需求。