1、開啟檔案
open(name[,mode[,buffering]])
open函式使用一個檔名作為其唯一的一個強制引數,然後返回一個檔案物件。模式(mode)和緩衝區(buffering)是可選的。
模式:
'r' 讀模式
'w' 寫模式
'a' 追加模式
'b' 二進位制模式,新增到其他模式中使用
'+' 讀/寫模式,新增到其他模式中使用
'+'引數可以用來任何模式後,指明讀和寫都是可以的。'b'模式改變處理檔案的方法。
二進位制模式和文字模式的區別:在使用二進位制模式時,python會原樣地給出檔案中的內容,但文字模式下則不一定。python會在文字模式下做一些轉換:當在windows下用文字模式讀取檔案時,python會將\r\n轉換成\n,相反,當在windows下用文字模式寫檔案時,會把\n轉換成\r\n。
緩衝:
如果引數為0,I/O就是無緩衝,所有的讀寫操作直接針對硬碟。如果是1,I/O就用記憶體來代替硬碟,是程式更快,使用flush或close時才把內容寫入硬碟。
2、讀和寫
f = open()
f.read(n) 讀取n個位元組
f.write(str)
f.close()
3、管式輸出
使用管道可以在一個命令的後面續寫其他多個命令,管道符號將一個命令的標準輸出和下一個命令的標準輸入連在一起。
$ cat test.txt | python somescript.py
檔案流隨機訪問函式seek(offset),把當前位置移動到offset定義的位置。
4、讀寫行
file.readline(n)當n為空是,讀取單獨一行,並讀取檔案換行符,當n為非負值時讀取檔案的前n個字元。
file.readlines()讀取一個檔案中的所有行,並以列表的返回。
file.writeline()沒有此函式。
file.wirtelines()將一個字串列表寫入到字串檔案中。
5、如果想確保檔案被關閉了,那麼應該使用try/finally語句,並且在finally字句中呼叫close()方法。
try:
file = open()
#操作檔案
finaly:
file.close()
with語句可以開啟檔案並將其賦值到變數上:
with open() as somefile:
do_someting(somefile)
6、對檔案內容進行迭代
6.1 按位元組處理,在迴圈裡做如下操作
f.read(1)
6.2 按行處理,在迴圈裡做如下操作
f.readline()
6.3 處理整個檔案
f.read() 將檔案當做一個字串來獲取
f.readlines() 將檔案讀入到一個字串列表
7、使用fileinput實現懶惰行迭代
懶惰行迭代的原因:在讀取非常大的檔案,readlines會佔用太多的記憶體,而懶惰行迭代只是讀取檔案中實際需要的部分。
import fileinput
for line in fileinput.input(filename):
process(line)
8、檔案迭代器
檔案物件是可以按照行進行迭代的。
f = open(filename)
for line in f:
process(line)
f.close()
可以對檔案迭代器執行和普通迭代器相同的操作:list(open(filename))