Python操作文件
1、open() 方法創(chuàng)建文件對(duì)象
Python 的 open() 方法用于打開(kāi)一個(gè)文件,該方法返回一個(gè)文件對(duì)象,在對(duì)文件進(jìn)行處理過(guò)程都需要使用到這個(gè)函數(shù),如果該文件無(wú)法被打開(kāi),會(huì)拋出 OSError。注意:使用 open() 方法后一定要保證關(guān)閉文件對(duì)象,即調(diào)用 close() 方法。
open() 函數(shù)常用形式是接收兩個(gè)參數(shù):文件路徑(file)和模式(mode)。
fileObject = open(filePath, mode='r')
完整的語(yǔ)法格式為:
open(filePath, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數(shù)說(shuō)明:
- filePath: 必需,文件路徑(相對(duì)或者絕對(duì)路徑)。
- mode: 可選,文件打開(kāi)模式
- buffering: 設(shè)置緩沖
- encoding: 一般使用utf8
- errors: 報(bào)錯(cuò)級(jí)別
- newline: 區(qū)分換行符
- closefd: 傳入的file參數(shù)類(lèi)型
- opener: 設(shè)置自定義開(kāi)啟器,開(kāi)啟器的返回值必須是一個(gè)打開(kāi)的文件描述符。
1.1、open()方法的文件打開(kāi)模式
opne()的第一個(gè)參數(shù)是路徑+文件名,第二個(gè)參數(shù)是mode文件打開(kāi)模式,該參數(shù)設(shè)置對(duì)文件進(jìn)行什么模式的操作,可能是只讀、只寫(xiě)或者讀寫(xiě)。如果我們?cè)O(shè)置了只讀,就不能寫(xiě),類(lèi)似的只寫(xiě)也是,但也可以設(shè)置讀寫(xiě)。
常見(jiàn)的 Mode 打開(kāi)模式的值:
|
Mode |
描述 |
|
r |
只讀。待打開(kāi)文件必須存在,文件的指針將會(huì)放在文件的開(kāi)頭。(默認(rèn)模式) |
|
w |
只寫(xiě)(重寫(xiě))。如果待打開(kāi)文件已存在,會(huì)先清空該文件的已有內(nèi)容,不存在則新創(chuàng)建一個(gè) |
|
a |
只寫(xiě)(追加)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾,新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,則創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
|
r+ |
讀寫(xiě),文件必須存在 |
|
w+ |
讀寫(xiě),如果待打開(kāi)文件已存在,會(huì)先清空,不存在則創(chuàng)建 |
|
a+ |
讀寫(xiě),如果文件已存在,不會(huì)清空,接著往后追加 |
不同模式打開(kāi)文件的完全列表:
| t | 文本模式 (默認(rèn)) |
| b | 二進(jìn)制模式 |
| + | 打開(kāi)一個(gè)文件進(jìn)行更新(可讀可寫(xiě)) |
| r | 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| rb | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。 |
| r+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
| rb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
| w | 打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb | 以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| w+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| wb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。 |
| a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| ab | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
| a+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
| ab+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
2、文件對(duì)象的常用方法
2.1、fileObject.read() 方法讀取文件內(nèi)容
我們可以使用 f.read(size) 來(lái)讀取文件內(nèi)容。
size 是一個(gè)可選的數(shù)字類(lèi)型的參數(shù)。 當(dāng) size 被忽略了或者為負(fù),那么將讀取該文件的所有內(nèi)容。如果指定了 size,那么只讀取指定的字節(jié)數(shù)內(nèi)容。該方法返回一個(gè)字符串對(duì)象,如果是一個(gè)圖片文件或者音頻文件等將返回一個(gè)字節(jié)對(duì)象。
以下實(shí)例假定文件 foo.txt 已存在(上面實(shí)例中已創(chuàng)建):
#!/usr/bin/python3 # 打開(kāi)一個(gè)文件 f = open("/tmp/foo.txt", "r") str = f.read() print(str) # 關(guān)閉打開(kāi)的文件 f.close()
2.2、fileObject.readline() 讀取文件的一行
f.readline() 會(huì)從文件中讀取單獨(dú)的一行。換行符為 '\n'。f.readline() 如果返回一個(gè)空字符串, 說(shuō)明已經(jīng)已經(jīng)讀取到最后一行。
#!/usr/bin/python3 f = open("/pythontab/code.txt") # 返回一個(gè)文件對(duì)象 line = f.readline() # 調(diào)用文件的 readline()方法 while line: print(line, end = '') # 在 Python 3中使用 line = f.readline() f.close()
我們也可以迭代一個(gè)文件對(duì)象來(lái)讀取每行的內(nèi)容:
#!/usr/bin/python3 # 打開(kāi)一個(gè)文件 f = open("/tmp/foo.txt", "r") for line in f: print(line, end='') # 關(guān)閉打開(kāi)的文件 f.close()
2.3、fileObject.readlines() 讀取文件的所有行
f.readlines() 將返回該文件中包含的所有行,該方法返回一個(gè)列表 list。
如果設(shè)置可選參數(shù) sizehint, 則讀取指定長(zhǎng)度的字節(jié), 并且將這些字節(jié)按行分割。
#!/usr/bin/python3 # 打開(kāi)一個(gè)文件 f = open("/tmp/foo.txt", "r") str = f.readlines() print(str) # 關(guān)閉打開(kāi)的文件 f.close()
2.4、fileObject.write(str) 寫(xiě)入內(nèi)容
f.write(string) 將 string 寫(xiě)入到文件中, 然后返回寫(xiě)入的字符數(shù)。
#!/usr/bin/python3 # 打開(kāi)一個(gè)文件 f = open("/tmp/foo.txt", "w") num = f.write( "Python 是一個(gè)非常好的語(yǔ)言" ) print(num) # 關(guān)閉打開(kāi)的文件 f.close()
實(shí)際上,在我們使用 write() 方法時(shí)并不是立即寫(xiě)入的,而是會(huì)先放到內(nèi)存的緩存區(qū),等到緩存區(qū)滿了之后再寫(xiě)入,當(dāng)然我們也可以使用 flush() 方法將緩存區(qū)的內(nèi)容立即寫(xiě)入到文件當(dāng)中。在我們調(diào)用 close() 方法時(shí),python會(huì)自動(dòng)將此時(shí)在緩沖區(qū)的內(nèi)容輸出到需要寫(xiě)入的文件當(dāng)中,并且保存。
2.5、fileObject.close() 關(guān)閉文件對(duì)象
當(dāng)你處理完一個(gè)文件后, 調(diào)用 f.close() 來(lái)關(guān)閉文件并釋放系統(tǒng)的資源。
關(guān)閉后如果再?lài)L試調(diào)用該文件,則會(huì)拋出異常。
f.close() f.read() #關(guān)閉后再讀取將報(bào)錯(cuò): # Traceback (most recent call last): # File "<stdin>", line 1, in ? # ValueError: I/O operation on closed file
當(dāng)處理一個(gè)文件對(duì)象時(shí), 使用 with 關(guān)鍵字是非常好的方式。在結(jié)束后, 它會(huì)幫你正確的關(guān)閉文件。 而且寫(xiě)起來(lái)也比 try - finally 語(yǔ)句塊要簡(jiǎn)短:
with open('/tmp/foo.txt', 'r') as f: ... read_data = f.read()

浙公網(wǎng)安備 33010602011771號(hào)