• 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)

  • 相关阅读:
    shell编程之 ()[] {}
    mysql环境搭建
    CSS布局基础——BFC
    Java线程
    chrome developer tool—— 断点调试篇
    JavaScript技巧[转载]
    如何在github中创建演示demo
    rem在响应式布局中的应用
    javascript模块化
    浏览器客户端的数据存储
  • 原文地址:https://www.cnblogs.com/xiao-zang/p/12510872.html
Copyright © 2020-2023  润新知