day13-文件修改的两种方式

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)

原文地址:https://www.cnblogs.com/xiao-zang/p/12510872.html