Python文件操作详解:打开模式、字节处理与修改策略
本文详细解析Python中的文件操作,涵盖文本与字节两种打开模式的区别,重点讲解rb、wb、ab等字节模式的使用规范及注意事项。同时深入探讨文件修改的底层原理,介绍内存覆盖与双文件替换两种常见修改策略,帮助开发者掌握高效且安全的文件读写技巧。
一:文件的打开模式
理解字符编码有助于掌握文件存储机制:文件在硬盘中均以二进制形式存在。使用默认文本模式打开文件时,例如 f = open('a.txt','rt',encoding='utf-8'),其中的 't' 代表文本模式。应用程序向操作系统发送数据请求后,操作系统从硬盘读取二进制编码并返回给应用,open 方法随后将该编码解码为可读字符。若采用 'b' 模式打开文件,open 方法则不对操作系统返回的二进制数据做额外处理,直接输出原始字节。
f = open('a.txt','rt',encoding='utf-8')
在文本模式('t')下,操作系统返回二进制编码后,open 方法会将其解码为用户可见的字符;而在字节模式('b')下,操作系统直接返回一串二进制数字,open 方法不做任何解码处理。
文件支持三种基本的打开方式:
只读模式:使用参数 'r'
只写方式:使用参数 'w'
追加模式:使用参数 'a'
使用字节模式打开文件时,需特别注意以下规范:
必须显式指定 'b' 参数,仅允许使用 rb、wb、ab 等形式打开文件,不可省略 'b'。
f = open('a.txt','rb')
f = open('a.txt','wb')
f = open('a.txt','ab')
#错误写法
f = open('a.txt','r') #未注明以b模式打开,这种写法是默认文本模式打开
f = open('a.txt','rb',encode = 'utf-8') #b模式打开,不能传入编码方式
字节模式下的读写操作均以 bytes 类型为单位。若需写入字符,必须先对字符进行编码,再以字节类型写入文件。
f = open('a.txt','wb')
f.write('你哈'.encode('utf-8'))
注意:对于非文本文件,必须使用字节模式。'b' 表示以字节方式操作,由于所有文件在底层均以字节形式存储,使用此模式无需考虑文本文件的字符编码、图片文件的 jpg 格式或视频文件的 avi 格式等具体问题。
二:字节模式下的操作
使用字节模式打开非文本文件(如图片、视频等)。
with open('1.jpg', 'rb') as f: # 以只读模式打开文件
data = f.read() # 读取文件全部内容,并赋值给变量data
print(data) # 打印变量,我们得到是b'\xff\xd8\xff\xe0\x00这种形式的结果
print(type(data)) # 变量的类型<class 'bytes'>
with open('1.jpg','rb') as f:
data = f.read()
print(type(data))
print(data.decode('utf-8')) #将读取的编码以utf-8标准解码
#图片文件编码方式不是utf-8,所以不能解码,程序报错
以字节模式打开文本文件的操作示例。
with open('db.txt', 'rb') as f:
data = f.read()
print(data) # 打印出来的是一串二进制数
print(data.decode('utf-8')) # 把二进制数用utf-8标准解码
print(type(data)) # 可以在屏幕上显示人类能看懂的字符了
with open('db.txt', 'wb') as f:
f.write('你好啊\n'.encode('utf -8'))
在字节模式下操作文件时,所有读写操作均基于二进制数据进行。
三:文件的修改
文件修改并非直观上的“擦除后重写”,而是基于硬盘特性的“新内容覆盖原内容”。修改过程发生在内存中:应用程序启动后,从硬盘读取数据至内存,在内存中执行修改操作(此时不影响硬盘数据)。点击保存时,新数据覆盖原数据,从而完成文件修改。
修改文件方式一: 1:先把文件内容全部读取 2:在内存中修改 3:把修改好的内容覆盖写入到硬盘上
with open("db.txt", "r", encoding="utf-8") as f: # 打开文件
data = f.read() # 读取文件全部内容
data = data.replace("你好啊:", "======") # 修改文件内容
with open("db.txt", "w", encoding="utf-8") as f: # 以‘w'模式打开,清空文件
f.write(data) # 把修改后的数据写入
修改文件方式二:
1:以读的方式打开源文件 2:以写的方式打开一个新文件
import os # 引入os模块
with open('a.txt', 'r', encoding='utf-8') as read_f, \
open('new.txt', 'w', encoding='utf-8') as new_f: # 同时打开文件
for line in read_f: # 循环原文件内容
if '你好啊' in line:
line = line.replace('你好啊', '哈哈哈哈哈哈') # 替换源文件内容
new_f.write(line) # 把原文件循环出来的内容写入到新文件中,
os.remove('a.txt') # 调用OS模块功能删除原文件
os.rename('new.txt', 'a.txt') # 重命名新文件
以上就是详解Python中的文件操作的详细内容,更多关于python 文件操作的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













