1. 程式人生 > >Python檔案基本操作及上下文管理

Python檔案基本操作及上下文管理

檔案基本操作

開啟檔案:f = open(fole_name,mode = 'r'),傳入表示檔案路徑的字串,會返回一個檔案物件,mode是檔案開啟模式。

關閉檔案:f.close(),呼叫給定檔案物件的close方法。

檔案開啟模式

  1. r:以只讀方法開啟檔案,檔案指標預設放在檔案開頭,檔案不存在就報錯。
  2. r+:開啟一個檔案用於讀寫,檔案指標預設放在檔案開頭,檔案不存在則報錯。
  3. w:開啟一個檔案只用於寫入,如果檔案已存在則將其覆蓋,不存在就建立一個新檔案。
  4. w+:開啟一個檔案用於讀寫,如果檔案已存在則將其覆蓋,不存在就建立一個新檔案。
  5. a:開啟一個檔案用於追加,如果檔案存在,檔案指標會放在檔案結尾,不存在就會建立一個新檔案進行寫入。
  6. a+:開啟一個檔案用於讀寫,如果檔案存在,檔案指標會放在檔案結尾,不存在就會建立一個新檔案進行寫入。

其他模式還有:rb 、rb+ 、wb 、 wb+ 、ab 、ab+。加個b的意思是以二進位制的格式寫入。

讀取/寫入檔案:

  1. f.read():讀取指定大小的內容。
  2. f.readline():讀取一行內容。
  3. f.readlines():讀取多行內容。
  4. f.write(data):寫入內容。
  5. f.writelines(lines):寫入多行內容,但需要自己加換行符。
  6. f.flush():立即重新整理緩衝。
  7. f.tell():返回檔案指標的位置。
  8. f.seek(position):調整檔案指標的位置。

上下文管理

上下文管理就是我們常用的with......as......方法。他可以在我們開啟檔案後自動地關閉檔案。在這上下文管理協議中,就涉及到了兩個魔法方法,一個是__enter__,另一個是__exit__。

  • __enter__(self):當with開始執行的時候觸發此方法的執行,返回值返回給as後面的變數。
  • __exit__(self, exc_type, exc_val, exc_tb):當with執行結束之後觸發此方法的執行,其中如果丟擲異常,exc_type、exc_val、exc_tb分別表示異常的型別、異常內容、異常顯示所在位置。

下面的例子就是重寫open裡的兩個方法測試一下檔案開啟、寫入、讀取、關閉所消耗的時間:

from datetime import datetime
class test_time():
    def __init__(self,filename,mode):
        self.filename = filename
        self.mode = mode
    def __enter__(self):
        self.start_time = datetime.now()
        self.f = open(self.filename,self.mode)
        return self.f
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.end_time = datetime.now()
        time = self.end_time - self.start_time
        print("程式執行時間為%s"%time)

run = test_time('tem.txt','w+')
with run as f:
    f.write("hello,world!my name is long")
    f.readline()

#程式執行時間為0:00:00.001000

記憶體假檔案(IO流)

   有時侯我們獲取的資料用於處理後就會丟棄不用,老用檔案來儲存可能會浪費記憶體,我們也許可以考慮下在記憶體中模擬一個檔案,也叫記憶體假檔案,它的好處是檔案一旦關閉,裡面的資料就會消失,因此常用於存放臨時的資料。相對於檔案的操作,假檔案的執行速度更快。

導包:import io

檔案建立:f = io.StringIo()

檔案寫入:f.write()

檔案讀取:f.getvalue()文論檔案指標在哪,讀取全部資料。

其他的基本操作基本上與檔案基本操作雷同

關於檔案的操作還有一個os模組,這個模組可以輕鬆實現檔案的許多操作:os模組