Python基礎 - 檔案和流

pythontab發表於2013-03-27

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))


相關文章