一、方式一:覆盖,大部分文本编辑器使用的方法。

  1、思路:将文件的全部内容一次性由硬盘读入内存,在内存中修改完再把硬盘上原来的内容清空并把新的内容存回。

  2、优点:不占用额外的硬盘空间。

  3、缺点:若文件内容过大,一次性涌入内存会对内存产生较大压力。

with open(r'02 待修改文件.txt', mode='rt', encoding='utf-8')as file:
    revise = file.read().replace('a', 'b')  # 将文件内容全部读到内存后进行修改
with open(r'02 待修改文件.txt', mode='wt', encoding='utf-8')as file:  # w模式打开原文件先清空原来内容
    file.write(revise)  # 将内存中修改好的内容一次性写入原文件

二、方式二:替换。

  1、思路:新建一个空的文件,将原文件的内容逐行或定量多次由硬盘读入内存,每次读入的内容在内存中修改完存进新文件的硬盘空间,待原文件全部内容修改存入后,新文件即是完整的修改后的内容,此时删除原文件,再按需要选择是否修改新文件名称。

  2、优点:保证一次占用的内存空间不会过多。

  3、缺点:操作完成之前硬盘上同时有两份数据占用空间。

import os  # 导入os模块,用于之后删除原文件以及修改新文件名

with open(r'02 待修改文件.txt', mode='rt', encoding='utf-8')as f1, \
        open(r'03 修改后文件.txt', mode='wt', encoding='utf-8')as f2:
    while 1:
        revise = f1.read(10)  # 每次读入10个Bytes的数据进入内存
        revise = revise.replace('a', 'b')  # 在内存中修改
        f2.write(revise)  # 修改好写入新文件
        if len(revise) == 0:  # 当无内容可读,即原文修改完成
            break  # 结束循环,修改完成
os.remove(r'02 待修改文件.txt')  # 删除原文件
os.rename(r'03 修改后文件.txt', r'03 修改后文件-改.txt')  # 将新文件名按要求修改

 

posted on 2020-01-03 05:01  焚音留香  阅读(344)  评论(0编辑  收藏  举报