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