zoukankan      html  css  js  c++  java
  • 文件修改

    # _*_ coding: utf-8 _*_
    # 须知一:
    # 硬盘空间无法修改,硬盘中的数据更新都是用新的内容覆盖旧的内容
    # 内存空间可以修改
    # with open('a.txt','r+t',encoding='utf-8') as f:
    # f.seek(4,0)
    # print(f.tell())
    # f.write('wocalei')

    # 须知二:
    # 文件对应的是硬盘空间,硬盘不能修改因为文件本质也不能修改,
    # 我们看到文件的内容可以修改,是如何实现的
    # 将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘
    # 硬盘-----》内存 (修改)---覆盖----》 硬盘

    # 具体的实现方式分为两种:
    # 一、
    # 将文件内容发一次性全部读入内存,
    # 然后在内存中修改完毕后再覆盖写回原文件
    # 优点:再文件修改过程中同一份数据只有一份
    # 缺点:会过多的占用内存

    # 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('db.txt',mode='rt',encoding='utf-8') as read_f,
    open('.db.txt.swap',mode= 'wt',encoding='utf-8') as write_f:
    for line in read_f:
    write_f.write(line.replace('SB','kevin'))

    os.remove('db.txt')
    os.renames('.db.txt.swap','db.txt')

  • 相关阅读:
    aop 切面编程
    动态代理模式
    idea 从接口方法 跳转到 实现类 对应的方法
    2019年的某一天
    javaweb . 页面登出 操作
    Could not find acceptable representation报错
    window下mysql character_set_server修改不生效问题
    git 命令推送
    spring boot 2.x + elasticsearch+mybatis-plus
    java8的Consumer函数式接口
  • 原文地址:https://www.cnblogs.com/OutOfControl/p/9688640.html
Copyright © 2011-2022 走看看