13---文件操作的小尾巴

一。seek()的应用----tail -f access.log程序

      功能:动态监测access.log文件中最新一行的内容

# 打开日志文件
import time
with open('access.log','rb') as f:
    # 将指针直接移动到文件末尾
    f.seek(0,2)
    # 文件不关闭,不停的读取access.log中的每一行
    while True:
        line = f.readline()
        # 如果读不到内容,就暂停休息一下
        if len(line) == 0:
            time.sleep(3)
        else:
            print(line.decode('utf-8'))

# 在日志文件中加入新的内容
with open('access.log','a',encoding='utf-8') as f:
    log = input('info>>>>:')
    f.write(f'{log}\n')

二。文件修改的两种方式

# 强调:
# 1、硬盘空间是无法修改的,硬盘中数据的更新都是用新内容覆盖旧内容
# 2、内存中的数据是可以修改的
# 方式一:文本编辑器采用的方式

# 需求:将a.txt中的alex修改为dsb

# 首先以读模式打开文件,将文件所有的数据加载到内存中
with open('a.txt','r',encoding='utf-8') as f:
    # 将文件一次性全部读入内存
    res = f.read()
    data = res.replace('dsb','alex')
# 再以写的模式打开该文件,进行写操作
with open('a.txt','w',encoding='utf-8') as f:
    f.write(data)

# 总结:耗费内存空间,节省硬盘空间。
方式二:在写程序时推荐使用的修改文件的方式
# 将a.txt中的egon改为tank
import os
with open('a.txt','r',encoding='utf-8') as f,\
    open('.c.txt.swap','w',encoding='utf-8') as f1:
    for line in f:
        f1.write(line.replace('egon','tank'))
    # 此时硬盘上存在两个相似的文件,一个是修改前的,另一个是修改后的
    # 但是,我们此时需要的是修改后的
# 删除修改前的文件
os.remove('a.txt')
# 将修改后的文件重命名为修改前的文件名
os.rename('.c.txt.swap','a.txt')

# 总结:耗费的是硬盘空间空间

 

posted @ 2020-03-17 14:06  微信搜索-程序媛小庄  阅读(308)  评论(0编辑  收藏  举报