一、with
语句管理上下文
在实际的编程中,我们会经常忘记关闭已经打开的文件对象,这样就会导致系统资源的浪费。
下面就推荐个保险的办法 :
with open('f1.txt','r', encoding='utf-8') as f:
content = f.read()
print(content)
print('此时文件已经自动关闭了')
使用
with
语句来管理上下文 ,操作之后,python 内部会自动关闭并释放文件资源。
二、文件的修改
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果。
- 就是先把要修改的文件内容读取到内存中,在内存中修改;
- 之后再把修改好的内容先存到一个临时的文件中;
- 最后把原来的文件删除,再把临时的文件的文件名修改为原来文件的文件名。
流程解析
"""
1\. 把源文件内容 读到内存中
2\. 在内存中修改文件的内容
3\. 把修改好的文件内容存到另外一个临时的文件中
4\. 把原文件删除
5\. 把临时文件的文件名修改为 原文件的文件名
"""
# 1\. 把源文件内容 读到内存中
with open('a.txt',
'r',
encoding='utf-8'
) as rf, open(
'.a.txt.swap',
'w',
encoding='utf-8') as wf:
content = rf.read()
# 2\. 在内存中修改文件的内容
new_content = content.replace('你好', 'world')
# 3\. 把修改好的文件内容存到另外一个临时的文件中
wf.write(new_content)
# 4\. 把原文件删除
import os
os.remove('a.txt')
# 5\. 把临时文件的文件名修改为 原文件的文件名
os.rename('.a.txt.swap', 'a.txt')
Python 中,具体的说有两种实现方式:
注意自己操作的文件的路径、权限、当初用什么编码写入的。比如你是在 Windows 系统下创建并写入的文件,字符编码默认是
gbk
。
1. 方式一:将硬盘存放的该文件的内容全部加载到内存,进行修改。
import os
with open('a.txt', 'r', encoding='utf-8') as read_f, open(
'.a.txt.swap','w', encoding='utf-8') as write_f:
r_data=read_f.read() # 全部读入内存,如果文件很大,会很卡
w_data=r_data.replace('千锋','千锋教育') # 在内存中完成修改
write_f.write(w_data) # 一次性写入新文件
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
2. 方式二:将硬盘存放的该文件的内容读一行,改一行,存一行。
import os
with open('a.txt', 'r', encoding='utf-8') as read_f,open(
'.a.txt.swap','w', encoding='utf-8') as write_f:
for line in read_f:
line=line.replace('杨哥','yangge')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
</article>