使用python的tempfile模塊創(chuàng)建臨時文件

什么樣的情況下需要我創(chuàng)建臨時文件呢?我很早就知道tempfile這個模塊,但一直沒有使用過它,也沒有興趣去研究它,一度認為自己用不到這個模塊。存在即合理,合理的才能存在,想來是我不夠虛心,才沒有看到這個模塊的應用價值。
1. 臨時文件目錄
在linux系統(tǒng)下有一個/tmp 目錄,這個目錄下存儲的都是些臨時文件,創(chuàng)建這些臨時文件的可能是操作系統(tǒng),也可能是你安裝的某個軟件系統(tǒng),比如hadoop,你自己寫的程序也可以對這里的文件進行讀寫操作。
臨時文件目錄下的文件夾和文件,會被定期清理,默認是30天。這就要求/tmp目錄下存儲的文件,必須都是可刪除的文件,刪除后不能對系統(tǒng)或軟件的運行產(chǎn)生影響。
windows系統(tǒng)下也有類似的文件夾,在我的電腦上,這個目錄是C:\Users\zhangdongsheng\AppData\Local\Temp 。
2. tempfile
使用tempfile模塊,可以創(chuàng)建臨時文件和臨時文件夾,主要應用它的兩個函數(shù),mkstemp 和 mkdtemp
from tempfile import mkstemp, mkdtemp
path = mkdtemp() # 創(chuàng)建臨時文件夾
print(path)
_, filepath = mkstemp() # 創(chuàng)建臨時文件
print(filepath)
什么樣的場景下需要使用臨時文件呢?我歸納總結為一條:程序運行后,你再也不會使用這些文件時,就可以創(chuàng)建為臨時文件。
程序一旦結束,運行期間所創(chuàng)建的文件便失去應用價值,那么這樣的文件就可以創(chuàng)建為臨時文件。所謂臨時文件,本質(zhì)上就是在/tmp 目錄下創(chuàng)建的文件,會定期清理。
由于這些文件在程序結束后不會再被使用,那么我們也就不必關心它在哪里創(chuàng)建,不必擔心它因為長期積累而占用磁盤空間,我們甚至不用考慮為它起一個名字,tempfile模塊會為臨時文件取一個隨機的名稱。
這些文件存在于程序運行期間,tempfile模塊簡化了我們對這些文件的管理,mkdtemp和mkstemp會返回文件夾和文件的路徑,這可以確保我們能夠?qū)ξ募A和文件進行操作但又不必去管理他們,這些管理包括新建,刪除等操作。
3. tempfile 使用技巧
盡管我們創(chuàng)建的是臨時文件,但在特定情況下,依然需要我們做一些簡單的管理,比如設置文件的前綴和后綴
def mkstemp(suffix=None, prefix=None, dir=None, text=False):
pass
通過設置suffix 和 prefix 參數(shù),可以決定文件名稱的后綴和前綴,如果在調(diào)試程序期間你需要查看臨時文件,這些前綴和后綴可以提供一些幫助。
dir參數(shù),決定臨時文件在哪個文件夾下被創(chuàng)建,默認是在/tmp目錄下創(chuàng)建,你可以設置為自己管理的文件夾。
4. 總結
在程序運行期間產(chǎn)生的中間文件既不能作為程序的輸出成果來展示,也沒有后續(xù)的應用價值,創(chuàng)建為臨時文件,則
