創建臨時文件和文件夾?在程序執行時創建一個臨時文件或目錄,并希望使用完之後可以自動銷毀掉,我來為大家講解一下關于創建臨時文件和文件夾?跟着小編一起來看一看吧!
在程序執行時創建一個臨時文件或目錄,并希望使用完之後可以自動銷毀掉
2. 原因分析tempFile 模塊中有很多的函數可以完成這任務。為了創建一個匿名的臨時文件,可以使用 tempfile.TemporaryFile
import tempfile
import os.path
# '<tempfile._TemporaryFileWrapper object at 0x0000023236E332B0>'
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 World
Cory 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)
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!