首頁 > 繪畫

建立臨時檔案和資料夾

作者:由 申浩黃粱 發表于 繪畫日期:2022-08-20

自動目錄格式怎麼設定

1。 現象

在程式執行時建立一個臨時檔案或目錄,並希望使用完之後可以自動銷燬掉

2。 原因分析

3。 問題解決

tempfile 模組中有很多的函式可以完成這任務。為了建立一個匿名的臨時檔案,可以使用 tempfile。TemporaryFile

import tempfileimport os。path# ‘’f_obj = tempfile。TemporaryFile(‘w+t’, encoding=‘utf-8’)# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpiu8k36rp’print(f_obj。name)# 寫入資料f_obj。write(‘Hello World\n’)f_obj。write(‘Cory Testing\n’)# 回到開始位f_obj。seek(0)# ‘Hello World\nCory Testing\n’data = f_obj。read()print(data)“”“Hello WorldCory Testing”“”# 如果不寫 也會根據垃圾回收機制 將生成的臨時檔案刪除f_obj。close()

也可以使用with語句

with tempfile。TemporaryFile(‘w+t’, encoding=‘utf-8’) as f_obj: print(f_obj。name) print(os。path。normpath(f_obj。name)) f_obj。write(‘Hello World\n’) f_obj。write(‘Cory Testing\n’) f_obj。seek(0) data = f_obj。read() print(data)

TemporaryFile 的第一個引數是檔案模式,通常來講文字模式使用 w+t ,二進位制模式使用 w+b,其他引數與 open 函式相同

引數

解釋

mode

模式引數,預設‘w+b’ 建立的檔案可讀可寫,b表示二進位制模式,可以通用所有系統平臺

buffering

與 open 函式相同,用於設定緩衝策略的可選整數,可選值0,1, >1 ,0表示緩衝buffering關閉,1代表行緩衝,>1 表示初始化的buffering緩衝

encoding

與 open 函式相同,返回的資料採用何種編碼

newline

與 open 函式相同,控制通用換行符模式的工作原理

suffix

檔名字尾,值為None,表示沒有後綴

prefix

檔名字首,如果值為None,使用預設使用 gettempprefix 和 gettempprefixb 返回的值作為字首,

dir

檔案所在目錄,如果值為None,使用預設目錄儲存檔案

在大多數 Unix 系統上,透過 TemporaryFile 建立的檔案都是匿名的,甚至連目錄都沒有。如果你想打破這個限制,可以使用 NamedTemporaryFile 來代替

實驗得知,兩者的名稱都可以獲得

named_f_obj = tempfile。NamedTemporaryFile(‘w+t’, encoding=‘utf-8’)# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpm_1vwckp’print(named_f_obj。name)unamed_f_obj = tempfile。TemporaryFile(‘w+t’, encoding=‘utf-8’)# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpozlh_men’print(unamed_f_obj。name)# TemporaryFile 與 NamedTemporaryFile 一樣,結果檔案關閉時會被自動刪除掉。如果不想這麼做,可以傳遞一個關鍵字引數delete=False 即可named_f_obj = tempfile。NamedTemporaryFile(‘w+t’, encoding=‘utf-8’, delete=False)# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmp55k__4ri’print(named_f_obj。name)unamed_f_obj = tempfile。TemporaryFile(‘w+t’, encoding=‘utf-8’, delete=False)# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpvoegzv8z’print(unamed_f_obj。name)

為了建立一個臨時目錄,可以使用 tempfile。TemporaryDirectory()

with tempfile。TemporaryDirectory() as dir_name: # ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpikl6vb6b’ print(‘Dirname is : ’, dir_name)

TemporaryFile、 NamedTemporaryFile 和 TemporaryDirectory 函式應該是處理臨時檔案目錄的最簡單的方式了,因為它們會自動處理所有的建立和清理步驟

在一個更低的級別,可以使用 mkstemp 和 mkdtemp 來建立臨時檔案和目錄

# ‘(3, ’C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpbizsgx_3‘)’tempfile。mkstemp()# ‘C:\Users\ADMINI~1\AppData\Local\Temp\tmpv3jye9ql’tempfile。mkdtemp()

但是,這些函式並不會做進一步的管理了,要自己清理這些檔案

通常來講,臨時檔案在系統預設的位置被建立,比如Unix下 /var/tmp 或類似的地方

所有和臨時檔案相關的函式都允許你透過使用關鍵字引數 prefix 、 suffix 和 dir來自定義目錄以及命名規則

f_obj = tempfile。NamedTemporaryFile(prefix=‘Temp_’, suffix=‘。info’, dir=‘E:\Temp’)# ‘E:\Temp\Temp_sj35onql。info’print(f_obj。name)

4。 錯誤經歷