在讀取一個(gè)文件的內(nèi)容之前,需要先打開這個(gè)文件雁社。在Python程序中可以通過內(nèi)置函數(shù)open()來打開一個(gè)文件程序中浴井,并用相關(guān)的方法讀或?qū)懳募募械膬?nèi)容以供程序的處理和使用,同時(shí)可以將文件看作Python中的一種數(shù)據(jù)類型霉撵。
用函數(shù)open()的語(yǔ)法格式如下:
open(filename, mode='r',buffering=None,encoding=None, errors=None,
newline=None,closefd=True,opener=None)
open: 打開
? ? ? 以什么樣的方式打開磺浙, 讀或?qū)?read, write
?以讀的方式:文本的方式洪囤, 二進(jìn)制的方式
?以寫的方式:文本的方式,二進(jìn)制的方式
? ? ? 寫文件的時(shí)候:覆蓋撕氧,追加(兩種方式)
當(dāng)使用上述函數(shù)open()打開一個(gè)文件后瘤缩, 就會(huì)放回一個(gè)文件對(duì)象。上述格式中主要參數(shù)的具體說明如下所示:
filename:表示要打開的文件名伦泥。(路徑+文件名)
mode:模式剥啤。
buffering:可選參數(shù),緩沖區(qū)大小
encoding:文件編碼類型不脯。
文本文件才有可能需要編碼府怯,二進(jìn)制文件不需要指定編碼 否則會(huì)報(bào)出異常
errors:編碼錯(cuò)誤處理方式。
newline:控制通用換行符模式的行為防楷。
closefd:控制在關(guān)閉文件時(shí)是否徹底關(guān)閉文件牺丙。
上述格式中,參數(shù)“mode”表示文件打開模式复局。在Python程序中冲簿,常用的文件打開模式如下表所示:
下圖很好的總結(jié)了這幾種模式:
#默認(rèn)以文本讀的方式打開
file_obj=open("file.txt",encoding="utf-8")
data =file_obj.read()
print(data)
file_obj.close()
file_obj =open("file.txt", "rt",encoding="utf-8")
data =file_obj.read()
print(data)
file_obj.close()
file_obj =open("file.txt", "w",encoding="utf-8")
data =file_obj.write("11111111111111111")
print(data)
file_obj.close()
file_obj =open("file2.txt", "w",encoding="utf-8")
data =file_obj.write("11111111111111111")
print(data)
file_obj.close()
file_obj =open("file2.txt", "a",encoding="utf-8")
data =file_obj.write("2222222222222")
print(data)
file_obj.close()
file_obj =open("file3.txt", "a+",encoding="utf-8")
file_obj.write("33333333333333333333333333")
file_obj.close()
file_obj =open("file.txt",encoding="utf-8")
data =file_obj.read()
file_obj.close()
二進(jìn)制的方式(打開):
圖片,音頻亿昏,視頻或者其他的非文本的文件
#打開”IO.png“文件峦剔,并以二進(jìn)制的方式讀出,? b不能單獨(dú)使用(b前的r不能省略)
file_obj =open("IO.png", "rb")
data =file_obj.read()
print(data)
#關(guān)閉文件
file_obj.close()
#以二進(jìn)制的方式寫入文件”psb_copy.jpg“
file_obj =open("psb_copy.jpg", "wb")
file_obj.write(data)
#關(guān)閉文件
file_obj.close()
?注意:“IO.png”文件中角钩,以存入了一張照片羊异。
02
文件的操作
以文本方式寫入的文件, 無需指定編碼以二進(jìn)制方式寫入文件,寫入的內(nèi)容要求為bytes彤断,所以通過str.encode('utf-8')來返回 bytes
文件寫操作:write()方法
f.write("hello world")? ?#向目標(biāo)文本文 件寫入一行字符串? ? ? ? ? ? ? ? ? ? ? ? ? ??
f.write("hello world".encode("utf-8"))? # 向目標(biāo)二進(jìn)制文件寫入一行字符串
文件寫操作:writelines()方法寫入文件的字符串序列野舶。
seq = ["hello world 1\n", "nihao wohao 2"] f.writelines( seq ) 7/15
文件讀操作:read()方法從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有宰衙。
ret = f.read() #默認(rèn)全部讀出
ret = f.read(5) #讀出指定長(zhǎng)度字符
文件讀操作:readline()方法可以讀出一行數(shù)據(jù)
ret = f.readline() #讀取一行?
注意:有個(gè)很像的 readlines()方法?ret = f.readlines()?#返回的是一個(gè)列表平道,且返回的是你讀取的字符所在行的整個(gè)內(nèi)容,但是當(dāng)數(shù)據(jù)較大時(shí)供炼,這樣的用法會(huì)很占用內(nèi)存一屋。
03
使用File操作文件
File對(duì)象中的屬性信息如下表所示:
在Python程序中,對(duì)象File時(shí)通過內(nèi)置函數(shù)實(shí)現(xiàn)對(duì)文件操作的袋哼,其中常用的內(nèi)置函數(shù)如下: