一:文件的打开模式
了解过字符编码都知道,文件都是以某一种标准编码成二进制存在硬盘里的,在文件的默认打开模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符;如果是以b模式打开文件的话,open方法不会对操作系统返回的二进制数据作处理,而是直接打印。
1
|
f = open ( 'a.txt' , 'rt' ,encoding = 'utf-8' )
|
其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符,那么在b模式下打开文件,操作系统返还直接是一串二进制数字
文件的三种打开方式:
只读模式:‘r'
只写方式:'w'
追加模式:'a'
以字节模式打开文件的话,需要注意:
一定要写上‘b',只能以rb,wb,ab这种形式打开文件,不能省略‘b'。
1
2
3
4
5
6
|
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为单位的。如果想写入字符,需要编码后以字节类型写入
1
2
|
f = open ( 'a.txt' , 'wb' )
f.write( '你哈' .encode( 'utf-8' ))
|
注意:对于非文本文件,我们只能使用字节模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
二:字节模式下的操作
字节模式打开非文本文件
1
2
3
4
5
6
7
8
9
10
|
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,所以不能解码,程序报错
|
以字节模式打开文本文件:
1
2
3
4
5
6
7
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:把修改好的内容覆盖写入到硬盘上
1
2
3
4
5
6
|
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:以写的方式打开一个新文件
1
2
3
4
5
6
7
8
9
10
11
|
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 文件操作的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/li1992/p/8633417.html