1. 程式人生 > >Python進階三部曲之IO操作

Python進階三部曲之IO操作

pre pri nes mode ble 數據 才會 readline 代碼

IO編程

文件讀寫

打開文件

open(file, mode=‘r‘, buffering=None, encoding=None, errors=None, newline=None, closefd=True) 具體需要查看API,這裏只介紹幾個常用的方法。

open函數的文件名是必傳參數,返回一個文件對象

#打開一個文件。
f = open(‘read.txt‘, ‘r‘)

open函數的mode參數:

功能描述
‘r‘ 讀模式
‘w‘ 寫模式
‘a‘ 追加模式
‘b‘ 二進制模式
‘+‘ 讀/寫模式

b參數一盤處理文本文件時是用不到b參數,便但處理其它類型的文件(二進制文件,)比如mp3或者圖像,那麽應該在模式參數中添加b

buffering,文件緩沖區:

緩沖區,默認是無緩沖區,

  1. 如果參數是0,IO操作就是無緩沖,直接將數據寫在硬盤上,

  2. 如果參數是1,IO操作就是有緩沖,數據先寫到內存裏,只有使用,flush函數,或者close函數,才會將數據更新到硬盤中,

  3. 如果參數大於天,則表示緩沖區的大小(單位是字節),-1(或者是任何負數)代表使用默認緩沖區的大小,

文件讀取,

  1. 文件讀取主要分為按字節讀取和按行進行讀取,常用的方法有read(),readlines(),close()

  2. 如果成功打開文本文件,接下來調用read()方法則可以一次性將文件內容,全部寫入到內存中,最後返回的是str類型的對象:

    f.read()

  3. 調用close()可以關閉對文件的引用,文件使用完後必須關閉,因為文件對象會占用系統資源,影響系統IO操作。

由於文件操作可能會出現IO異常,一旦出現IO異常,後面的close()方法就不會調用。所以為了保證程序的健壯性,我們需要使用try...finally來實現。

try:
    f = open(‘read.txt‘, ‘r‘)
    print(f.read())
finally:
    if f:
        f.close()

python提供了一種簡單的寫法,使用with語句來替代try...finally代碼塊和close()方法。

with open(‘read.txt‘, ‘r‘) as fileReader:
    print(fileReader.read())

由於可能會出現文件過大,將會出現內存不足,python提供更加合理的做法,調用readline()來每次讀一行內容。

  • 小文件可以直接采取read()方法讀取到內存中,
  • 大文件更加安全的方式是連續使用read(size)
  • 對於配置文件等文本文件,使用readline()更加合理。
with open(‘read.txt‘, ‘r‘) as fileReader:
    for line in fileReader.readlines():
        print(line.strip())

得到結果:
1
2
3
4
5
6
7
8
9        

文件寫入

推薦寫法:


with open(‘read.txt‘, ‘w‘) as fileWriter:
    for num in range(1, 100):
        fileWriter.write(str(num)+‘\n‘)

Python進階三部曲之IO操作