zoukankan      html  css  js  c++  java
  • 文件的修改/作业

    # 文件a.txt内容如下
    张三三     江苏    199    49
    李思思     广西    222    57
    王捂捂     山西    333    62
    
    # 执行操作
    with open('a.txt',mode='r+t',encoding='utf-8') as f:
        f.seek(9)
        f.write('<广义相对>')
    
    # 文件修改后的内容如下
    张三<广义相对>     江苏    199    49
    李四     广西    222    57
    王五     山西    333    62
    
    # 强调:
    # 1、硬盘空间是无法修改的,硬盘中数据的更新都是用新内容覆盖旧内容
    # 2、内存中的数据是可以修改的
    
    • 文件对应的是硬盘空间,硬盘不能修改对应着文件本质也不能修改, 那我们看到文件的内容可以修改,是如何实现的呢?
    • 大致的思路是将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘 具体的实现方式分为两种:
    ##一
    # 将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
    # 优点: 在文件修改过程中同一份数据只有一份
    # 缺点: 会过多地占用内存
    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'))
    

      

    ##二
    # 以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
    # 优点: 不会占用过多的内存
    # 缺点: 在文件修改过程中同一份数据存了两份
    import os
    
    with open('bb.txt',mode='rt',encoding='utf-8') as read_f,
            open('.bb.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
        for line in read_f:
            wrife_f.write(line.replace('sb','suaige'))
    
    os.remove('bb.txt')
    os.rename('.bb.txt.swap','bb.txt')
    

      

    通用文件copy工具实现

    use_file = input("输入文件路径:").strip()
    new_file = input("输入新文件路径:").strip()
    with open('{}'.format(new_file), mode="rb") as f1, 
            open('{}'.format(new_file), mode="wb") as f2:
        for line in f1:
            f2.write(line)
    

      

    基于seek控制指针移动,测试r+、w+、a+模式下的读写内容

    with open("b.txt","r+",encoding="utf-8") as f :
        print(f.read())
        f.seek(5,0)
        print(f.tell())
        f.write("bbb")
        print(f.read())
    

      

    with open("b.txt",wr+",encoding="utf-8") as f :
        print(f.read())
        f.seek(5,0)
        print(f.tell())
        f.write("bbb")
        print(f.read())
    

      

    with open("b.txt","a+",encoding="utf-8") as f :
        print(f.read())
        f.seek(5,0)
        print(f.tell())
        f.write("bbb")
        print(f.read())
    

    tail -f access.log程序实现

      

    import time
    with open('access.log', 'rt', encoding='utf-8') as f:
        f.seek(0, 2)
        while True:
            res = f.readline()
            if not res:
                time.sleep(0.5)
                continue
            print(res)
    

      

  • 相关阅读:
    如何用机器学习强化市场营销活动。
    大数据统计脚本, 分城市订单统计
    宇宙常量与增长黑客。
    病毒传播效果的衡量公式
    浅谈对增长黑客的理解
    大数据分析, 数据挖掘, 机器学习,找到产品改进的爆点。
    R语言的日期运算
    安装语言包-英文(美国)
    selenium page objects
    logging模块
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12506399.html
Copyright © 2011-2022 走看看