在讀取一個文件的內容之前,需要先打開這個文件。在Python程序中可以通過內置函數open()來打開一個文件程序中,并用相關的方法讀或寫文件文件中的內容以供程序的處理和使用,同時可以將文件看作Python中的一種數據類型。
用函數open()的語法格式如下:
open(filename, mode='r',buffering=None,encoding=None, errors=None,
newline=None,closefd=True,opener=None)
open: 打開
? ? ? 以什么樣的方式打開, 讀或寫 read, write
?以讀的方式:文本的方式, 二進制的方式
?以寫的方式:文本的方式,二進制的方式
? ? ? 寫文件的時候:覆蓋,追加(兩種方式)
當使用上述函數open()打開一個文件后, 就會放回一個文件對象。上述格式中主要參數的具體說明如下所示:
filename:表示要打開的文件名。(路徑+文件名)
mode:模式。
buffering:可選參數,緩沖區大小
encoding:文件編碼類型。
文本文件才有可能需要編碼,二進制文件不需要指定編碼 否則會報出異常
errors:編碼錯誤處理方式。
newline:控制通用換行符模式的行為。
closefd:控制在關閉文件時是否徹底關閉文件。
上述格式中,參數“mode”表示文件打開模式。在Python程序中,常用的文件打開模式如下表所示:
下圖很好的總結了這幾種模式:
#默認以文本讀的方式打開
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()
二進制的方式(打開):
圖片,音頻,視頻或者其他的非文本的文件
#打開”IO.png“文件,并以二進制的方式讀出,? b不能單獨使用(b前的r不能省略)
file_obj =open("IO.png", "rb")
data =file_obj.read()
print(data)
#關閉文件
file_obj.close()
#以二進制的方式寫入文件”psb_copy.jpg“
file_obj =open("psb_copy.jpg", "wb")
file_obj.write(data)
#關閉文件
file_obj.close()
?注意:“IO.png”文件中,以存入了一張照片。
02
文件的操作
以文本方式寫入的文件, 無需指定編碼以二進制方式寫入文件,寫入的內容要求為bytes,所以通過str.encode('utf-8')來返回 bytes
文件寫操作:write()方法
f.write("hello world")? ?#向目標文本文 件寫入一行字符串? ? ? ? ? ? ? ? ? ? ? ? ? ??
f.write("hello world".encode("utf-8"))? # 向目標二進制文件寫入一行字符串
文件寫操作:writelines()方法寫入文件的字符串序列。
seq = ["hello world 1\n", "nihao wohao 2"] f.writelines( seq ) 7/15
文件讀操作:read()方法從文件讀取指定的字節數,如果未給定或為負則讀取所有。
ret = f.read() #默認全部讀出
ret = f.read(5) #讀出指定長度字符
文件讀操作:readline()方法可以讀出一行數據
ret = f.readline() #讀取一行?
注意:有個很像的 readlines()方法?ret = f.readlines()?#返回的是一個列表,且返回的是你讀取的字符所在行的整個內容,但是當數據較大時,這樣的用法會很占用內存。
03
使用File操作文件
File對象中的屬性信息如下表所示:
在Python程序中,對象File時通過內置函數實現對文件操作的,其中常用的內置函數如下: