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