5.7 文件的修改
5.7 文件的修改
文件不能插入,但是有需求要修改文件。
5.7.1 修改文件的两种方法
#读和写分开
#方法1
with (open('test.txt',mode='r',encoding='utf-8') as f_r):
data=f_r.read()
print(data,type(data))
data=data.replace('world','bayue')
print(data)
#新建test_copy文件
with open('test.txt',mode='w',encoding='utf-8') as f_w:
f_w.write(data)
以上方式容易报错,可能多个用户同时修改写入同一个文件,会乱掉
#方法2
with open('test.txt',mode='r',encoding='utf-8') as f_r:
data=f_r.read()
print(data,type(data))
data=data.replace('world','bayue')
print(data)
#新建test_copy文件
with open('test_copy.txt',mode='w',encoding='utf-8') as f_w:
f_w.write(data)
import os
#删除源文件test.txt
os.remove('test.txt')
# 将test_copy.txt文件名称修改为test.txt
os.rename('test_copy.txt','test.txt')
总结
方法1
-
如果qq想修改文件中的a为b,而微信想修改文件中的a为c,两者修改时间由先后顺序。
-
qq先修改完成,但是微信已经在文件中找不到a了,就容易报错。
方法2
- 如果qq想修改文件中的a为b,而微信想修改文件中的a为c。
- 所以给qq和微信各一份copy文件,让它们各自修改,也是有先后顺序。
- 修改成功后,删除源文件,修改copy文件名为原来的文件名。
5.7.3 合并与优化代码
- 合并代码
#同时打开两个文件
with open('test.txt',mode='r',encoding='utf-8') as f_r,\
open('test_copy.txt', mode='w', encoding='utf-8') as f_w:
data=f_r.read()
print(data,type(data))
data=data.replace('world','bayue')
f_w.write(data)
print(data)
import os
os.remove('test.txt')
os.rename('test_copy.txt','test.txt')
当文件非常大时
with open('test.txt',mode='r',encoding='utf-8') as f_r:
print(f_r.readlines()) #readlines需要额外占用内存空间
# for i in f_r.readlines():
# print(i)
for i in f_r: #f_r相当于readlines(),是生成器,一个可迭代对象。但是无需额外开辟内存空间。
print(i)
- 优化上述代码
#1.打开文件,创建拷贝文件
with open('test.txt',mode='r',encoding='utf-8') as f_r,\
open('test_copy.txt', mode='w', encoding='utf-8') as f_w: #w清空文件,write只负责写
#2. 读取文件内容并且修改文件内容
for i in f_r: #无需新开辟一块内存空间存放文件内容
i=i.replace('world','bayue')
#3. 修改后的内容写入拷贝文件
f_w.write(i)
import os
#4.删除源文件
os.remove('test.txt')
#5.更改拷贝文件名称为源文件名称
os.rename('test_copy.txt','test.txt')
总结重点
-
with open(r'filepath',mode,encoding) as filename:
file操作 -
rt/rb/wt/at
- 文件的复制改写步骤
- 打开文件,创建拷贝文件
- 读取文件内容并且修改文件内容
- 修改后的内容写入拷贝文件
- 删除源文件
- 更改拷贝文件名称为源文件名称
- 文件的复制改写步骤
浙公网安备 33010602011771号