# _*_ 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')