讀寫文件是最常見的IO操作。Python內(nèi)置了讀寫文件的函數(shù),用法和C是兼容的。
讀寫文件前,我們先必須了解一下,在磁盤上讀寫文件的功能都是由操作系統(tǒng)提供的,現(xiàn)代操作系統(tǒng)不允許普通的程序直接操作磁盤,所以,讀寫文件就是請(qǐng)求操作系統(tǒng)打開一個(gè)文件對(duì)象(通常稱為文件描述符),然后,通過操作系統(tǒng)提供的接口從這個(gè)文件對(duì)象中讀取數(shù)據(jù)(讀文件),或者把數(shù)據(jù)寫入這個(gè)文件對(duì)象(寫文件)。
2.1.1 文件操作基本格式
你必須先用Python內(nèi)置的open()函數(shù)打開一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象,相關(guān)的方法才可以調(diào)用它進(jìn)行讀寫?;靖袷饺缦?/p>
f = codecs.open('filename', 'mode')
f.read()
f.write()
f.close()
mode | 描述 |
---|---|
r | 以只讀方式打開文件。文件的指針將會(huì)放在文件的開頭。。 |
rb | 以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式。 |
r+ | 打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。 |
rb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。 |
w | 打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
wb | 以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
w+ | 打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
wb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
a | 打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
ab | 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
a+ | 打開一個(gè)文件用于讀寫。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
ab+ | 以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。 |
2.1.2 文件操作的方法
-
flush()
將緩沖區(qū)的內(nèi)容,立刻寫入到文件并清空緩沖區(qū)。一般情況是在關(guān)閉文件的時(shí)候?qū)?nèi)容從緩沖區(qū)清空,在不使用 close 方法的時(shí)候,flush 可以將文件寫入到文件。
f = open('filename','wb')
f.flush()
f.close()
-
readlins()
讀取所有行,每行都處理成字符串,并返回一個(gè)列表。注: 執(zhí)行之后,光標(biāo)位置移動(dòng)到文件末尾,再次讀取的時(shí)候,會(huì)返回一個(gè)空列表
f = open('filename','rb')
text = f.readlines()
print(text[0,1]) # 打印返回列表的前兩個(gè)元素
f.close()
-
readline()
從文件中讀取 1 行,并且光標(biāo)移動(dòng)到下一行。
f = open('filename', 'rb')
print('文件名為: ', f.name)
text = f.readline()
print('讀取的字符串是: %s' %(text))
print('讀取的字符串是: %s' %(text))
print('讀取的字符串是: %s' %(text))
fs.close()
-
seek()
移動(dòng)文件讀取的指針到制定位置,即移動(dòng)光標(biāo)所在位置
f.seek(offset[, where])
注: 在文件中移動(dòng)文件指針,從 where(0 代表文件起始位置,1 代表當(dāng)前位置,2代表文件末尾)偏移 offset 個(gè)字節(jié)
-
tell()
返回當(dāng)前指針在文件中的位置, 一般配合 seek 一起使用
f.tell(offset[, where])