【tempfile】
驚奇地又發現了一個比較有意思的小模塊。
在一些場景中我們經常需要自動生成一些臨時文件,當然用簡單的open函數,來創建一個隱藏文件可以實現。不過tempfile這個模塊把一些有的沒的功能全部都封裝完畢。我們直接使用即可。
■ 簡單使用
from tempfile import TemporaryFile temp = TemporaryFile() print temp print temp.name ''' TemporaryFile類的構造方法,其返回的還是一個文件對象。但這個文件對象特殊的地方在於 1. 對應的文件沒有文件名,對除了本程序之外的程序不可見 2. 在被關閉的同時被刪除 所以上面的兩句打印語句,輸出分別是一個文件對象,以及一個<fdopen>(並不是文件名) ''' # 向臨時文件中寫入內容 temp.write('hello\nworld') # ...一些操作之后需要讀取臨時文件的內容了 temp.seek(0) # 從頭讀取,和一般文件對象不同,seek方法的執行不能少 print temp.read() temp.close() # 關閉文件的同時刪除文件
TemporaryFile類是tempfile中最常用的類之一,其目的就在於提供一個統一的臨時文件調用接口,讀寫臨時文件,並且保證臨時文件的隱形性。這個類的構造方法和一般的文件對象很類似:tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])。可以看到默認的打開模式是w+b,但是和一般通過wb模式打開的文件對象不同之處在於,正如上面所示它也可以用於讀取文件。
在TemporaryFile類的基礎上又衍生出了兩個更加精細化的類用來處理。NamedTemporaryFile類是在前者的基礎上,初始化時加上了delete參數,默認值為True。當此參數為True時和TemporaryFile類完全一致。如果是False,那么臨時文件對象在被關閉時不會刪除。因此可以在下面的代碼中通過同樣的對象再次打開。
另一個是SpooledTemporaryFile,它在TemporaryFile的基礎上增加了一個max_size參數默認值為0。當這個類的對象調用write方法向臨時文件中寫入內容時,這些內容暫時先存在於緩存中,只有當內容大小達到了max_size指定的大小(經試驗應該不是這樣的,存疑)
● 創建臨時文件夾
tempfile中還有創建臨時目錄的功能。比如tempfile.mkdtemp方法。這個方法做的事情是在系統指定的臨時目錄下(比如TEMP,TEMPDIR這些環境變量指向的目錄)創建一個臨時目錄,可以指出一個標識名讓目錄名中包含這個標識名。方法返回的是新創建的臨時目錄的路徑。