zoukankan      html  css  js  c++  java
  • 18、Python之文件修改及f.seek的使用

    一、f.seek的使用

    案例:tail -f access.log程序实现
    import time
    
    with open('access.log', mode='rb') as f:
        # 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='')
    

    二、文件修改的两种方式

    对于硬盘来说,文件的操作没有修改,只有重新覆盖,但内存中的数据可以修改。

    # 文件a.txt内容如下
    张一蛋     山东    179    49    12344234523
    李二蛋     河北    163    57    13913453521
    王全蛋     山西    153    62    18651433422
    
    # 执行操作
    with open('a.txt',mode='r+t',encoding='utf-8') as f:
        f.seek(9)
        f.write('<妇女主任>')
    
    # 文件修改后的内容如下
    张一蛋<妇女主任> 179    49    12344234523
    李二蛋     河北    163    57    13913453521
    王全蛋     山西    153    62    18651433422
    
    # 强调:
    # 1、硬盘空间是无法修改的,硬盘中数据的更新都是用新内容覆盖旧内容
    # 2、内存中的数据是可以修改的
    

    2.1 文件修改方式一:

    # 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
    # 优点: 在文件修改过程中同一份数据只有一份
    # 缺点: 会过多地占用内存
    with open('db.txt',mode='rt',encoding='utf-8') as f:
        data=f.read()
    
    with open('db.txt',mode='wt',encoding='utf-8') as f:
        f.write(data.replace('kevin','SB'))
    

    2.1 文件修改方式二:

     

    # 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
    # 优点: 不会占用过多的内存
    # 缺点: 在文件修改过程中同一份数据存了两份
    import os
    
    with open('db.txt',mode='rt',encoding='utf-8') as read_f,
            open('.db.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
        for line in read_f:
            wrife_f.write(line.replace('SB','kevin'))
    
    os.remove('db.txt')
    os.rename('.db.txt.swap','db.txt')
    
  • 相关阅读:
    git常用命令图解 & 常见错误
    关于ES6的Promise的使用深入理解
    几种简单排序算法代码
    HttpMessageNotWritableException异常解决办法
    关于 java swing 使用按钮关闭窗口
    几种简单的排序总结
    MJ老师博客园的美化代码
    [转]iOS开发之常用的数学函数和常数
    iOS如何简单实现绘制爱心?
    重新入门python爬虫到放弃
  • 原文地址:https://www.cnblogs.com/zuiyouyingde/p/12512096.html
Copyright © 2011-2022 走看看