1. 程式人生 > 程式設計 >Python tempfile模組生成臨時檔案和臨時目錄

Python tempfile模組生成臨時檔案和臨時目錄

tempfile 模組專門用於建立臨時檔案和臨時目錄,它既可以在 UNIX 平臺上執行良好,也可以在 Windows 平臺上執行良好。

tempfile 模組中常用的函式,如表 1 所示。

表 1 tempfile 模組常用函式及功能

tempfile 模組函式 功能描述
tempfile.TemporaryFile(mode='w+b',buffering=None,encoding=None,newline=None,suffix=None,prefix=None,dir=None) 建立臨時檔案。該函式返回一個類檔案物件,也就是支援檔案 I/O。
tempfile.NamedTemporaryFile(mode='w+b',dir=None,delete=True) 建立臨時檔案。該函式的功能與上一個函式的功能大致相同,只是它生成的臨時檔案在檔案系統中有檔名。
tempfile.SpooledTemporaryFile(max_size=0,mode='w+b',dir=None) 建立臨時檔案。與 TemporaryFile 函式相比,當程式向該臨時檔案輸出資料時,會先輸出到記憶體中,直到超過 max_size 才會真正輸出到物理磁碟中。
tempfile.TemporaryDirectory(suffix=None,dir=None) 生成臨時目錄。
tempfile.gettempdir() 獲取系統的臨時目錄。
tempfile.gettempdirb() 與 gettempdir() 相同,只是該函式返回位元組串。
tempfile.gettempprefix() 返回用於生成臨時檔案的字首名。
tempfile.gettempprefixb() 與 gettempprefix() 相同,只是該函式返回位元組串。

提示:表中有些函式包含很多引數,但這些引數都具有自己的預設值,因此如果沒有特殊要求,可以不對其傳參。

tempfile 模組還提供了 tempfile.mkstemp() 和 tempfile.mkdtemp() 兩個低級別的函式。上面介紹的 4 個用於建立臨時檔案和臨時目錄的函式都是高級別的函式,高級別的函式支援自動清理,而且可以與 with 語句一起使用,而這兩個低級別的函式則不支援,因此一般推薦使用高級別的函式來建立臨時檔案和臨時目錄。

此外,tempfile 模組還提供了 tempfile.tempdir 屬性,通過對該屬性賦值可以改變系統的臨時目錄。

下面程式示範瞭如何使用臨時檔案和臨時目錄:

import tempfile
# 建立臨時檔案
fp = tempfile.TemporaryFile()
print(fp.name)
fp.write('兩情若是久長時,'.encode('utf-8'))
fp.write('又豈在朝朝暮暮。'.encode('utf-8'))
# 將檔案指標移到開始處,準備讀取檔案
fp.seek(0)
print(fp.read().decode('utf-8')) # 輸出剛才寫入的內容
# 關閉檔案,該檔案將會被自動刪除
fp.close()
# 通過with語句建立臨時檔案,with會自動關閉臨時檔案
with tempfile.TemporaryFile() as fp:
# 寫入內容
fp.write(b'I Love Python!')
# 將檔案指標移到開始處,準備讀取檔案
fp.seek(0)
# 讀取檔案內容
print(fp.read()) # b'I Love Python!'
# 通過with語句建立臨時目錄
with tempfile.TemporaryDirectory() as tmpdirname:
print('建立臨時目錄',tmpdirname)

上面程式以兩種方式來建立臨時檔案:

第一種方式是手動建立臨時檔案,讀寫臨時檔案後需要主動關閉它,當程式關閉該臨時檔案時,該檔案會被自動刪除。

第二種方式則是使用 with 語句建立臨時檔案,這樣 with 語句會自動關閉臨時檔案。

上面程式最後還建立了臨時目錄。由於程式使用 with 語句來管理臨時目錄,因此程式也會自動刪除該臨時目錄。

執行上面程式,可以看到如下輸出結果:

C:\Users\admin\AppData\Local\Temp\tmphvehw9z1
兩情若是久長時,又豈在朝朝暮暮。
b'I Love Python!'

建立臨時目錄C:\Users\admin\AppData\Local\Temp\tmp3sjbnwob

上面第一行輸出結果就是程式生成的臨時檔案的檔名,最後一行輸出結果就是程式生成的臨時目錄的目錄名。需要注意的是,不要去找臨時檔案或臨時資料夾,因為程式退出時該臨時檔案和臨時資料夾都會被刪除。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。