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')
#结果:
'''
优良差
优良差
优良差'''

优点:对内存来说,每次只读原文件中的一行,然后写入临时文件中去,同一时间内存中只读入一行内容,不会占用过多的内存

缺点:对硬盘来说,以为临时文件的原因,会多占用一份硬盘的储存空间。

  • 具体用那种方式,看情况、看需求。

posted @ 2020-03-17 21:29  风起千寻  阅读(319)  评论(0编辑  收藏  举报