Python的文件和流
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))