日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python臨時文件創建之tempfile模塊介紹_python

作者:嵌入式技術 ? 更新時間: 2022-05-22 編程語言

一、tempfile模塊簡介

1、tempfile模塊應用場景

Pythontempfile模塊是用來創建臨時文件或者文件夾的跨平臺工具。在大型數據處理項目中,有的處理結果是不需要向用戶最終展示的,但是它們的應用又是貫穿項目始終的,在這種情況下,我們就需要使用tempfile模塊來解決這種問題。

2、tempfile模塊的方法

tempfile模塊主要包括三類函數:

  • (1)四個高級接口:TemporaryFileNamedTemporaryFileSpooledTemporaryFileTemporaryDirectory,這四個高級接口提供了自動清除功能并且可以作為上下文管理器使用。
函數名 描述
TemporaryFile和NamedTemporaryFile 高級臨時文件對象創建函數
SpooledTemporaryFile 假脫機模式高級臨時文件對象創建函數
TemporaryDirectory 高級臨時目錄創建函數
  • (2)另外,兩個底層函數mkstemp()mkdtemp(),用于生成臨時底層的臨時文件和文件夾,在使用完它們的時候需要手動清除。
函數名 描述
mkstemp() 底層臨時文件創建函數
mkdtemp() 底層臨時目錄創建函數
  • (3)最后,tempfile模塊還有一些針對文件、文件夾屬性的操作函數gettempdir()gettempdirb()gettempprefixgettempprefixb
函數名 描述
gettempdir() 以文本格式返回臨時文件夾名函數
gettempdirb() 以二進制格式返回臨時文件夾名函數
gettempprefix 以文本格式返回臨時文件名前綴
gettempprefixb 以二進制格式返回臨時文件名前綴

tempfile的所有用戶可調用函數和構造函數都帶有額外參數,通過這些參數可以實現對臨時文件目錄和位置的管理。此模塊會在共享臨時目錄中安全地創建臨時文件,并給創建臨時文隨機起個名。

二、tempfile模塊主要函數介紹

高級臨時文件對象創建函數:Temporaryfile和NamedTemporaryFile

1、Temporaryfile函數

Temporaryfile函數返回一個類文件對象用作臨時存儲區,它使用與mkstemp()函數相同規則的安全重建文件模式,它一關閉就會被銷毀(包括針對垃圾收集對象的隱式關閉)。需要注意的是,在Unix系統環境,文件的目錄要么根本不創建,要么在文件創建后立即刪除。也就是說,代碼不會依賴于此函數創建的臨時文件,包括它們的名稱,這也是這個函數與NamedTemporaryfile函數的不同之處。

TemporaryFile函數的調用格式為:

TemporaryFile(mode='w+b', buffering=-1, encoding=None,
?? ?newline=None, suffix=None, prefix=None, *, error=None)

函數參數選項:

  • (1)mode參數:默認為w+r,以便文件在被創建時可以執行讀寫操作。
  • (2)buffering、encoding、errors和newline參數:用于解釋open()函數行為。
  • (3) dir、prefix和suffix參數:與mkstemp()具有相同的含義和默認設置。

下面給出一個典型例子:

import tempfile

# 下面創建一個臨時文件并寫入一些數據
fp = tempfile.TemporaryFile()
fp.write(bb'Hello Xiaoliang!')

# 讀取數據
fp.seek(0); ?fp.read()

另外,該函數生成的對象可以用作上下文管理器(參見示例)。完成上下文管理或銷毀文件對象后,臨時文件將從文件系統中刪除。

import tempfile

with tempfile.TemporaryFile() as fp:
?? ?fp.write(b'Hello Xiaoliang!')
?? ?fp.seek(0)
?? ?fp.read()

2、NamedTemporaryfile函數

除了NamedTemporaryfile()函數實現了在文件系統中只有一個可見名之外,其作用與TemporaryFile()功能完全相同。執行完該函數后,我們可以從返回的類文件對象的name屬性中檢索文件名稱。在Unix系統上,在命名的臨時文件處于打開狀態時,可以使用該名稱打開生成的文件。

NamedTemporaryFile函數的調用格式與TemporaryFile函數的非常相似,唯一不同的是具有了一個delete參數:

NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,
?? ?newline=None, suffix=None, prefix=None, dir=Nonde, delete=True,
?? ?*, error=None)

delete參數選項:如果該參數為True(默認),則文件一關閉則被刪除。返回的對象始終是一個類文件對象,其文件屬性是底層的真實文件對象。也就是說,這個類文件對象可以在with上下文管理中使用,就像普通文件一樣。

3、假脫機模式高級臨時文件對象創建函數:SpooledTemporaryfile

SPOOL技術簡介:

SPOOL是Simultaneous Peripheral Operation On-Line
(即外部設備聯機并行操作)的縮寫,它是關于慢速字符設備如何與計算機主機交換信息的一種技術,通常稱為“假脫機技術”。其實,嚴格意義上說,SPOOL系統既不同于脫機方式,也不同于直接耦合方式,SPOOL技術實際上是一種外圍設備同時聯機操作技術,又稱為排隊轉儲技術。它在輸入和輸出之間增加了“輸入井”和“輸出井”的排隊轉儲環節,以消除用戶的“聯機”等待時間。

SpooledTemporaryFile()函數除了數據會在內存中進行假脫機外,與TemporaryFile()完全相同。直到文件大小超過max_size或直到調用文件的fileno()方法,此時使用與TemporaryFile()一樣的操作,將內容寫入磁盤。

該函數同樣返回一個類文件對象,其_file屬性可以是io.BytesIO(二進制模式)、io.TextIOWrapper(文本模式)對象或真實的文件對象(調用roller()函數)。同樣的,這個類文件對象可以在with上下文管理中使用,就像普通文件一樣。

該函數還有一個額外的方法rollover(),它使創建的文件滾尋磁盤上的內容,而不管其大小。SpooledTemporaryFile函數的調用格式與TemporaryFile()函數一樣,這里就不介紹了。

4、高級臨時目錄創建函數:TemporaryDirectory

TemporaryDirectory函數使用與mkdtemp()相同的規則安全地創建臨時目錄。生成的對象可以用作上下文管理器(這里給出示例)。完成上下文或銷毀臨時目錄對象后,新創建的臨時目錄及其所有內容將從文件系統中刪除。其調用格式如下所示:

TemporaryDirectory(suffix=None, prefix=None, dir=None)

調用該函數后,創建的目錄名可以從返回對象的name屬性中檢索到。當返回的對象作為上下文管理器時,該名稱將被分配給with語句中as子句的目標。另外,可以通過調用cleanup()方法顯式清理目標。

5、底層臨時文件/目錄創建函數:mkstemp和mkdtemp

底層臨時文件創建函數mkstemp()

mkstemp()函數以盡可能安全的方式創建臨時文件,與TemporaryFile()函數不同,用戶需要負責臨時文件的刪除。其調用格式如下所示:

mkstemp(suffix=None, prefix=None, dir=None, text=False)

函數參數選項:

  • (1)suffix:文件后綴,默認為None。如果不是None,文件名將以設置的后綴結尾。注意,mkstemp()函數不會在文件名和后綴之間加一個點,如果需要可以自行添加。
  • (2)prefix:文件前綴,默認為None。如果不是None,文件以該前綴為開頭;否則使用默認前綴,默認的前綴是由gettempprefix()或gettempprefixb()的返回值確定。
  • (3)dir:文件創建的目錄,默認為None,如果不是None,則使用默認目錄;默認目錄是從所使用的系統列表中選擇的,但是用戶可以通過設置TMPDIR、TEMP或TMP環境變量來控制目錄位置。
  • (4)text:文本類型,默認為False,即以二進制模式打開。如果為true,則以文本格式打開。

mkstemp()返回一個元組,該元組包含一個用于打開文件的操作系統級別(OS-leve)句柄(有os.open()函數返回)和該文件絕對路徑名。

底層臨時目錄創建函數mkdtemp()

mkdtemp()函數以盡可能安全的方式創建臨時目錄。只有通過用戶ID才能讀取、寫入和搜索目錄,同時用戶負責刪除臨時目錄及其內容。其調用格式和參數與mkstemp()相同,這里就不展開介紹了。注意,mkdtemp()函數只返回新建目錄的絕對路徑。

三、tempfile模塊的文件/文件夾屬性操作函數

1、返回臨時文件夾名函數:gettempdir和gettempdirb

gettempdir()返回存放臨時文件的文件夾名字,該函數的返回值是tempfile內的全局變量,也就是說,gettempdir()返回的文件夾名將作為tempfile模塊中的所有函數dir參數的默認值。

Python內部搜索一個標準目錄列表,用戶可以在其中創建文件的目錄:

  • (1)由TMPDIR環境變量命名的目錄;
  • (2)由TEMP環境變量命名的目錄;
  • (3)由TMP環境變量命名的目錄。
  • (4)不同平臺特定的位置:

Windows系統,目錄為:C:\TEMP, C:\TMP, \TEMP, and \TMP;
其他系統,目錄為:/tmp, /var/tmp, and /usr/tmp。

  • (5)當前工作目錄。

另外,還有一個與gettempdir()作用相同,只是返回的格式二進制的函數gettempdirb()。

2、返回臨時文件前綴函數:gettempprefix和gettempprefix

gettempprefix以文本格式返回創建的臨時文件的前綴;gettempprefixb以二進制格式返回創建的臨時文件的前綴。

原文鏈接:https://blog.csdn.net/weixin_37926734/article/details/123563067

欄目分類
最近更新