Python文件的操作處理詳解
1.使用open()函數(shù)打開文件夾
在讀取一個(gè)文件的內(nèi)容之前,需要先打開這個(gè)文件。在Python程序中可以通過內(nèi)置函數(shù)open()來打開一個(gè)文件程序中,,并用相關(guān)的方法讀或?qū)懳募募械膬?nèi)容以供程序的處理和使用,同時(shí)可以將文件看作Python中的一種數(shù)據(jù)類型。是用函數(shù)open()的語法格式如下。
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程序中,常用的文件打開模式如下表所示。
模式 | 描述 |
r | 以讀的方式打開文件(默認(rèn)) |
rb | 以二進(jìn)制的格式打開一個(gè)文件只用于讀。文件指針將會(huì)放在文件開頭。 |
r+ | 打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件開頭。 |
rb+ | 以二進(jìn)制的格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件開頭。 |
w | 以寫的方式打開,先清空文件再寫(覆蓋),如果該文件不存在,創(chuàng)建新文件 |
wb | 以二進(jìn)制的格式打開文件并寫入,先清空文件再寫(覆蓋),如果該文件不存在,創(chuàng)建新文件。 |
w+ | 以二進(jìn)制的格式打開一個(gè)文件用于讀寫。先清空文件再寫(覆蓋),如果該文件不存在,創(chuàng)建新文件。 |
wb+ | 以二進(jìn)制的格式打開文件并讀寫,先清空文件再寫(覆蓋),如果該文件不存在,創(chuàng)建新文件。 |
a | 以追加的方式去寫 |
ab | 以二進(jìn)制的格式打開一個(gè)文件夾用于追加。如果該文件存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)寫入到已有的內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件。 |
a+ | 打開一個(gè)文件用于讀寫。如果該文件存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件。 |
ab+ | 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件。 |
下圖很好的總結(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()
1.1.2二進(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”文件中,以存入了一張照片。
2.文件的操作
以文本方式寫入的文件, 無需指定編碼 以二進(jìn)制方式寫入文件,寫入的內(nèi)容要 求為bytes,所以通過str.encode('utf-8')來返回 bytes
1.2.1 文件寫操作:
write()方法 f.write("hello world") #
向目標(biāo)文本文 件寫入一行字符串
f.write("hello world".encode("utf-8")) #
向目標(biāo)二進(jìn)制文件寫入一行字符串1.2.2文件寫操作:
writelines()
方法寫入 文件的字符串序列。
seq = ["hello world 1\n", "nihao wohao 2"] f.writelines( seq ) 7/15
1.2.3 文件讀操作:
read()
方法從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。
ret = f.read() #
默認(rèn)全部讀出 ret = f.read(5) #讀出指定長(zhǎng)度字符1.2.4 文件讀操作:
readline()
方法可以讀 出一行數(shù)據(jù)ret = f.readline() #
讀取一行注意:有個(gè)很像的
readlines()
方法ret = f.readlines() #
返回的是一個(gè)列 表,且返回的是你讀取的字符所在行的整個(gè)內(nèi)容,但是當(dāng)數(shù)據(jù)較大時(shí),這樣的用法會(huì)很占 用內(nèi)存。
3.使用File操作文件
3.1File對(duì)象的介紹
File對(duì)象中的屬性信息如下表所示。
File對(duì)象中的屬性信息
屬性 | 描述 |
file.closed | 如果文件已關(guān)閉返回True;否則返回False |
file.mode | 返回打開文件的訪問模式 |
file.name | 返回文件的名稱 |
在Python程序中,對(duì)象File時(shí)通過內(nèi)置函數(shù)實(shí)現(xiàn)對(duì)文件操作的,其中常用的內(nèi)置函數(shù)如下。
File對(duì)象中的內(nèi)置函數(shù)
函數(shù) | 功能 |
file.close() | 關(guān)閉文件,關(guān)閉文件后不能再進(jìn)行讀寫操作 |
file.flush() | 刷新文件內(nèi)部緩沖區(qū),直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)寫入文件,而不是被動(dòng)的等待輸出緩沖區(qū)寫入。 |
file.fileno() | 返回一個(gè)整形的文件描述,可以用在如os模塊的read方法等一些底層操作上 |
file.isatty() | 如果文件連接到一個(gè)終端設(shè)備返回True,否則返回False |
file.next() | 返回文件下一行 |
file.read([size]) | 從文件讀取指定的字節(jié)數(shù),如果為給定或者為負(fù)值,則讀取所有字節(jié) |
file.readline([size]) | 讀取整行,包括“\n” |
file.readlines([hint]) | 讀取所有行并返回列表,如給定hint>,返回總合大于約為hint字節(jié)的行,實(shí)際讀取值可能比hine大,因?yàn)樾枰畛渚彌_區(qū) |
file.seek(offsrt[, whence]) | 設(shè)置文件當(dāng)前位置 |
file.tell | 返回文件當(dāng)前位置 |
file.truncate([size]) | 截取文件,截取的字節(jié)通過size指定,默認(rèn)為當(dāng)前文件的位置 |
file.write(str) | 將字符串寫入文件,沒有返回值 |
file.writeline(lines) | 向文件寫入一個(gè)序列字符串列表,如果需要換行,則要自己加入換行符。 |
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。