python tempfile 创建临时目录
一、tempfile介紹
該模塊創建臨時文件和目錄。它適用于所有支持的平臺。TemporaryFile,NamedTemporaryFile,TemporaryDirectory,和SpooledTemporaryFile是高級接口,其提供自動清理和可被用作上下文管理器。mkstemp()并且?mkdtemp()是需要手動清理的低級功能。
所有用戶可調用的函數和構造函數都采用其他參數,這些參數允許直接控制臨時文件和目錄的位置和名稱。此模塊使用的文件名包括一串隨機字符,允許在共享臨時目錄中安全地創建這些文件。為了保持向后兼容性,參數順序有些奇怪;?為清晰起見,建議使用關鍵字參數。
?
二、創建臨時文件
1、TemporaryFile
該模塊定義以下用戶可調用項:
tempfile.TemporaryFile(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None?)返回一個類似文件的對象,可以用作臨時存儲區域。使用與之相同的規則安全地創建文件mkstemp()。它將在關閉后立即銷毀(包括在對象被垃圾收集時隱式關閉)。在Unix下,文件的目錄條目根本不是創建的,或者在創建文件后立即刪除。其他平臺不支持此功能;?您的代碼不應該依賴于使用此函數創建的臨時文件,該文件在文件系統中具有或不具有可見名稱。
生成的對象可以用作上下文管理器。完成文件對象的上下文或銷毀后,臨時文件將從文件系統中刪除。
所述模式參數默認為'w+b'使得所創建的文件可以被讀取并且沒有被關閉寫入。使用二進制模式,使其在所有平臺上的行為一致,而不考慮存儲的數據。?緩沖,編碼和換行符被解釋為?open()。
該目錄,prefix和suffix的參數具有相同的含義和缺省值與mkstemp()。
返回的對象是POSIX平臺上的真實文件對象。在其他平臺上,它是一個類文件對象,其file屬性是底層的真實文件對象。
os.O_TMPFILE如果該標志可用且有效,則使用該標志(特定于Linux,需要Linux內核3.11或更高版本)。
版本3.5中已更改:os.O_TMPFILE現在使用該標志(如果可用)。
示例:
from tempfile import TemporaryFile ''' TemporaryFile類的構造方法,其返回的還是一個文件對象。但這個文件對象特殊的地方在于 1. 對應的文件沒有文件名,對除了本程序之外的程序不可見 2. 在被關閉的同時被刪除 ''' temp = TemporaryFile(dir=r'D:\test') # 創建一個臨時文件對象(類似文件句柄) temp.write(b'hello world') # 向臨時文件中寫入內容(bytes類型)# 讀取臨時文件的內容 temp.seek(0) # 從頭讀取,和一般文件對象不同,seek方法的執行不能少 print(temp.read())temp.close() # 關閉文件的同時刪除文件?
2、NamedTemporaryFile
tempfile.NamedTemporaryFile(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None,delete = True?)NamedTemporaryFile 的運行方式與 TemporaryFile 完全相同。不同之處在于,NamedTemporaryFile?初始化時加上了delete參數,默認值為True。當此參數為True時和TemporaryFile類完全一致。如果是False,那么臨時文件對象在被關閉時不會刪除。因此可以在下面的代碼中通過同樣的對象再次打開。可以從name返回的類文件對象的屬性中檢索該名稱。
3、SpooledTemporaryFile
tempfile.SpooledTemporaryFile(max_size = 0,mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None?)此函數的運行方式與此完全相同TemporaryFile(),只是數據在內存中假脫機,直到文件大小超過max_size,或者直到fileno()調用文件的方法為止,此時內容將寫入磁盤,操作繼續進行?TemporaryFile()。
生成的文件有一個額外的方法,rollover()使文件無論其大小如何都會轉到磁盤文件。
返回的對象是一個類文件對象,其_file屬性是一個io.BytesIO或io.StringIO對象(取決于是否指定了二進制或文本模式)或真正的文件對象,具體取決于是否rollover()已被調用。類似文件的對象可以在with語句中使用,就像普通文件一樣。
在3.3版中更改:?truncate方法現在接受一個size參數。
?
4、mktemp
python早期創建臨時文件的方法是:
1.首先使用mktemp()函數生成文件名(包涵文件路徑)
2.然后使用此名稱創建文件。
3.示例
import tempfile tmp_path = tempfile.mktemp(dir=r"D:\test") # 指定生成的文件目錄:D:\test目錄下 print(tmp_path) # D:\test\tmpq44i5ytv ---- tmpq44i5ytv是隨機生成的文件名 with open(tmp_path, 'w+') as f: # mktemp只生成路徑,并沒有生成文件,需手動調用open創建f.write('Hello world')# f.flush()?
5、mkstemp
tempfile.mkstemp(suffix = None,prefix = None,dir = None,text = False?)mkstemp方法用于創建一個臨時文件。該方法僅僅用于創建臨時文件,調用tempfile.mkstemp函數后,返回包含兩個元素的元組,第一個元素指示操作該臨時文件的安全級別,第二個元素指示該臨時文件的路徑。參數suffix和prefix分別表示臨時文件名稱的suffix和prefix;dir指定了臨時文件所在的目錄,如果沒有指定目錄,將根據系統環境變量TMPDIR,?TEMP或者TMP的設置來保存臨時文件;參數text指定了是否以文本的形式來操作文件,默認為False,表示以二進制的形式來操作文件。
?
三、創建臨時目錄
1、TemporaryDirectory
tempfile.TemporaryDirectory(suffix=None,prefix=None,dir =None)
此功能使用與之相同的規則安全地創建臨時目錄mkdtemp()。生成的對象可以用作上下文管理器。完成上下文或銷毀臨時目錄對象后,將從文件系統中刪除新創建的臨時目錄及其所有內容。
可以從name返回的對象的屬性中檢索目錄名稱。當返回的對象用作上下文管理器時,?name將as在with語句中將該子句的目標分配給該子句的目標(如果有)。
可以通過調用該cleanup()方法顯式清除該目錄?。
版本3.2中的新功能。
?
2、mkdtemp
tempfile.mkdtemp(suffix=None,prefix=None,dir =None)盡可能以最安全的方式創建臨時目錄。目錄的創建中沒有競爭條件。該目錄只能通過創建用戶ID進行讀取,寫入和搜索。
用戶mkdtemp()負責在完成后刪除臨時目錄及其內容。
該prefix,suffix和DIR參數是一樣的?mkstemp()。
mkdtemp()?返回新目錄的絕對路徑名。
在版本3.5中更改:suffix,prefix和目錄現在可以以字節為單位提供,以獲取字節返回值。在此之前,只允許str。?suffix和prefix現在接受并默認為None使用適當的默認值。
?
3、gettempdir
tempfile.gettempdir()用于返回保存臨時文件的文件夾路徑。這定義了此模塊中所有函數的dir參數的默認值。
Python搜索標準目錄列表以找到調用用戶可以創建文件的目錄。列表是:
由...命名的目錄?TMPDIR?環境變量。
由...命名的目錄?TEMP?環境變量。
由...命名的目錄?TMP?環境變量。
特定于平臺的位置:
-
在Windows中,目錄C:\TEMP,C:\TMP,?\TEMP,并\TMP按此順序。
-
在所有其他平臺,目錄/tmp,/var/tmp以及?/usr/tmp在這個順序。
作為最后的手段,當前的工作目錄。
緩存此搜索的結果,請參閱tempdir下面的說明?。
4、gettempdirb
tempfile.gettempdirb()與gettempdir()但相同,返回值以字節為單位。
版本3.5中的新功能。
5、gettempprefix
tempfile.gettempprefix()返回用于創建臨時文件的文件名prefix。這不包含目錄組件。
6、gettempprefixb
tempfile.gettempprefixb()與gettempprefix()但相同,返回值以字節為單位。
版本3.5中的新功能。
該模塊使用全局變量來存儲用于返回的臨時文件的目錄名稱gettempdir()。它可以直接設置以覆蓋選擇過程,但不鼓勵這樣做。此模塊中的所有函數都使用dir參數,該參數可用于指定目錄,這是推薦的方法。
?
7、tempdir
tempfile.tempdir當設置為其他值時None,此變量定義此模塊中定義的函數的dir參數的默認值。
如果tempdir是None(默認值)任何上述函數的調用,除非gettempprefix()它按照中描述的算法初始化gettempdir()。
?
四、示例
以下是tempfile模塊典型用法的一些示例:
import tempfile# 1.創建一個臨時文件并向其中寫入一些數據 fp = tempfile.TemporaryFile() fp.write(b'Hello world!')# 2.從文件中讀取數據 fp.seek(0) fp.read() # b'Hello world!'# 3.關閉文件,它將被刪除 fp.close()# 4.使用上下文管理器創建臨時文件 with tempfile.TemporaryFile() as fp:fp.write(b'Hello world!')fp.seek(0)fp.read() # b'Hello world!' # 文件現在已關閉并刪除# 6.使用上下文管理器創建臨時目錄 with tempfile.TemporaryDirectory() as tmpdirname:print('created temporary directory', tmpdirname) # 目錄和內容已被刪除?
?
?
轉載于:https://www.cnblogs.com/Zzbj/p/11204539.html
總結
以上是生活随笔為你收集整理的python tempfile 创建临时目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python IDLE 无法启动
- 下一篇: 开发ASP.NET Atlas服务器端E