共计 1237 个字符,预计需要花费 4 分钟才能阅读完成。
引入
1. 修改的概念
- 对于硬盘上数据的修改, 根本没有改的操作, 只有覆盖操作
2. 修改的流程
- 文件的修改都是数据加载到内存中, 在内存中修改完再覆盖入硬盘
一. 修改方式一
1. 修改过程
- 先以 r 模式打开源文件,将源文件内容全部读入内存
- 然后在内存中完成修改
- 再以 w 模式打开源文件,将修改后的内容覆盖入源文件
2. 优缺点
- 优点 : 不须要硬盘预留足够的空间
- 缺点 : 会在文件内容过大的情况下,占用过多的 内存
3. 使用场景
- 看情况而定, 一般用于文本编辑器, 让用户能看到全部的内容
with open('user.txt',mode='r',encoding='utf-8') as f:
data=f.read()
data=data.replace('派大星','派大星和海绵宝宝')
with open('user.txt',mode='w',encoding='utf-8') as f:
f.write(data)
二. 修改方式二
1. 修改过程
- 以 r 模式打开源文件,然后以 w 模式打开一个 临时文件
- 从源文件中读一行到内存中,修改完毕后直接写入临时文件,循环往复,直到操作完毕所有行
- 删除源文件,将临时文件名改名为源文件名
2. 使用到 OS
模块
import os
: 导入模块os.remove()
: 删除os.rename()
: 改名
3. 优缺点
- 优点:没有对内存造成过度的占用
- 缺点 :需要 硬盘 预留出足够的空间来存放临时文件
4. 适用场景
- 看具体而定, 一般用于程序员开发式
import os
with open('user.txt',mode='rt',encoding='utf-8') as read_f,\
open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:
for line in read_f:
if '派大星' in line:
line=line.replace('派大星','派大星和海绵宝宝')
write_f.write(line)
os.remove('user.txt') #删除源文件
os.rename('user.txt.swap','user.txt') #把临时文件名改成源文件名
三. 文件拷贝示例
可以拷贝任意类型的文件
🍉"os.path.isfile()" 先判断文件是否存在
import os
while 1:
user_file = input(" 请输入文件路径 >>").strip()
if not os.path.isfile(user_file):
print(" 文件不存在, 请重新输入 ")
continue
else:
copy_path = input(" 请输入目标路径 >>").strip()
with open(r"%s"%(user_file),"rb")as read_file,\
open(r"%s"%(copy_path),"ab")as w_f:
for line in read_file:
w_f.write(line)
if len(user_file) == len(copy_path):
print("copy 成功 ")
break
正文完