1.seek的应用(tail -f功能的实现) 实时的监控文件的最后的内容并显示在屏幕上
import time # 导入时间模块,后续睡眠使用 with open('access.log', mode='rb') as f: # rb模式读文件 # 1、将指针跳到文件末尾 # f.read() # 错误 f.seek(0,2) while True: line=f.readline() if len(line) == 0: time.sleep(0.3) else: print(line.decode('utf-8'),end='') #总结大体思路,先使用seek功能把指针跳到文件尾部,然后 做读取内容功能,若读出来的内容长度为0则代表没有内容, 时间睡眠0.3秒,再往复检查,若不为0则代表有内容,按照 要求读取出来即可,并指定解码方式和结尾符是什么。
2.文件修改的两种方式
方式一:文本编辑采用的就是这种方式
实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
优点: 在文件修改过程中同一份数据只有一份
缺点: 会过多地占用内存
with open('c.txt',mode='rt',encoding='utf-8') as f: res=f.read() data=res.replace('alex','dsb') print(data) with open('c.txt',mode='wt',encoding='utf-8') as f1: f1.write(data)
方式二:
实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
优点: 不会占用过多的内存
缺点: 在文件修改过程中同一份数据存了两份
import os # os系统操作相关功能函数 with open('c.txt', mode='rt', encoding='utf-8') as f, open('.c.txt.swap', mode='wt', encoding='utf-8') as f1: for line in f: f1.write(line.replace('alex', 'dsb')) os.remove('c.txt') # 删除指定文件 os.rename('.c.txt.swap', 'c.txt') # 修改指定文件名称为新名称 f = open('a.txt') # 这两步是查看 修改完后的内容是什么 res = f.read() print(res)