一、方式一:覆盖,大部分文本编辑器使用的方法。
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') # 将新文件名按要求修改