Python檔案基本操作及上下文管理
阿新 • • 發佈:2018-12-11
檔案基本操作
開啟檔案:f = open(fole_name,mode = 'r'),傳入表示檔案路徑的字串,會返回一個檔案物件,mode是檔案開啟模式。
關閉檔案:f.close(),呼叫給定檔案物件的close方法。
檔案開啟模式:
- r:以只讀方法開啟檔案,檔案指標預設放在檔案開頭,檔案不存在就報錯。
- r+:開啟一個檔案用於讀寫,檔案指標預設放在檔案開頭,檔案不存在則報錯。
- w:開啟一個檔案只用於寫入,如果檔案已存在則將其覆蓋,不存在就建立一個新檔案。
- w+:開啟一個檔案用於讀寫,如果檔案已存在則將其覆蓋,不存在就建立一個新檔案。
- a:開啟一個檔案用於追加,如果檔案存在,檔案指標會放在檔案結尾,不存在就會建立一個新檔案進行寫入。
- a+:開啟一個檔案用於讀寫,如果檔案存在,檔案指標會放在檔案結尾,不存在就會建立一個新檔案進行寫入。
其他模式還有:rb 、rb+ 、wb 、 wb+ 、ab 、ab+。加個b的意思是以二進位制的格式寫入。
讀取/寫入檔案:
- f.read():讀取指定大小的內容。
- f.readline():讀取一行內容。
- f.readlines():讀取多行內容。
- f.write(data):寫入內容。
- f.writelines(lines):寫入多行內容,但需要自己加換行符。
- f.flush():立即重新整理緩衝。
- f.tell():返回檔案指標的位置。
- 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模組