溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python的tempfile模塊怎么用

發(fā)布時(shí)間:2022-03-21 09:09:26 來(lái)源:億速云 閱讀:294 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Python的tempfile模塊怎么用”,在日常操作中,相信很多人在Python的tempfile模塊怎么用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python的tempfile模塊怎么用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、tempfile模塊簡(jiǎn)介

1、tempfile模塊應(yīng)用場(chǎng)景

Pythontempfile模塊是用來(lái)創(chuàng)建臨時(shí)文件或者文件夾的跨平臺(tái)工具。在大型數(shù)據(jù)處理項(xiàng)目中,有的處理結(jié)果是不需要向用戶最終展示的,但是它們的應(yīng)用又是貫穿項(xiàng)目始終的,在這種情況下,我們就需要使用tempfile模塊來(lái)解決這種問(wèn)題。

2、tempfile模塊的方法

tempfile模塊主要包括三類函數(shù):

  • (1)四個(gè)高級(jí)接口:TemporaryFileNamedTemporaryFile、SpooledTemporaryFileTemporaryDirectory,這四個(gè)高級(jí)接口提供了自動(dòng)清除功能并且可以作為上下文管理器使用。

函數(shù)名描述
TemporaryFile和NamedTemporaryFile高級(jí)臨時(shí)文件對(duì)象創(chuàng)建函數(shù)
SpooledTemporaryFile假脫機(jī)模式高級(jí)臨時(shí)文件對(duì)象創(chuàng)建函數(shù)
TemporaryDirectory高級(jí)臨時(shí)目錄創(chuàng)建函數(shù)
  • (2)另外,兩個(gè)底層函數(shù)mkstemp()mkdtemp(),用于生成臨時(shí)底層的臨時(shí)文件和文件夾,在使用完它們的時(shí)候需要手動(dòng)清除。

函數(shù)名描述
mkstemp()底層臨時(shí)文件創(chuàng)建函數(shù)
mkdtemp()底層臨時(shí)目錄創(chuàng)建函數(shù)
  • (3)最后,tempfile模塊還有一些針對(duì)文件、文件夾屬性的操作函數(shù)gettempdir()、gettempdirb()、gettempprefix、gettempprefixb。

函數(shù)名描述
gettempdir()以文本格式返回臨時(shí)文件夾名函數(shù)
gettempdirb()以二進(jìn)制格式返回臨時(shí)文件夾名函數(shù)
gettempprefix以文本格式返回臨時(shí)文件名前綴
gettempprefixb以二進(jìn)制格式返回臨時(shí)文件名前綴

tempfile的所有用戶可調(diào)用函數(shù)和構(gòu)造函數(shù)都帶有額外參數(shù),通過(guò)這些參數(shù)可以實(shí)現(xiàn)對(duì)臨時(shí)文件目錄和位置的管理。此模塊會(huì)在共享臨時(shí)目錄中安全地創(chuàng)建臨時(shí)文件,并給創(chuàng)建臨時(shí)文隨機(jī)起個(gè)名。

二、tempfile模塊主要函數(shù)介紹

高級(jí)臨時(shí)文件對(duì)象創(chuàng)建函數(shù):Temporaryfile和NamedTemporaryFile

1、Temporaryfile函數(shù)

Temporaryfile函數(shù)返回一個(gè)類文件對(duì)象用作臨時(shí)存儲(chǔ)區(qū),它使用與mkstemp()函數(shù)相同規(guī)則的安全重建文件模式,它一關(guān)閉就會(huì)被銷毀(包括針對(duì)垃圾收集對(duì)象的隱式關(guān)閉)。需要注意的是,在Unix系統(tǒng)環(huán)境,文件的目錄要么根本不創(chuàng)建,要么在文件創(chuàng)建后立即刪除。也就是說(shuō),代碼不會(huì)依賴于此函數(shù)創(chuàng)建的臨時(shí)文件,包括它們的名稱,這也是這個(gè)函數(shù)與NamedTemporaryfile函數(shù)的不同之處。

TemporaryFile函數(shù)的調(diào)用格式為:

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

函數(shù)參數(shù)選項(xiàng):

  • (1)mode參數(shù):默認(rèn)為w+r,以便文件在被創(chuàng)建時(shí)可以執(zhí)行讀寫操作。

  • (2)buffering、encoding、errors和newline參數(shù):用于解釋open()函數(shù)行為。

  • (3) dir、prefix和suffix參數(shù):與mkstemp()具有相同的含義和默認(rèn)設(shè)置。

下面給出一個(gè)典型例子:

import tempfile

# 下面創(chuàng)建一個(gè)臨時(shí)文件并寫入一些數(shù)據(jù)
fp = tempfile.TemporaryFile()
fp.write(bb'Hello Xiaoliang!')

# 讀取數(shù)據(jù)
fp.seek(0);  fp.read()

另外,該函數(shù)生成的對(duì)象可以用作上下文管理器(參見(jiàn)示例)。完成上下文管理或銷毀文件對(duì)象后,臨時(shí)文件將從文件系統(tǒng)中刪除。

import tempfile

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

2、NamedTemporaryfile函數(shù)

除了NamedTemporaryfile()函數(shù)實(shí)現(xiàn)了在文件系統(tǒng)中只有一個(gè)可見(jiàn)名之外,其作用與TemporaryFile()功能完全相同。執(zhí)行完該函數(shù)后,我們可以從返回的類文件對(duì)象的name屬性中檢索文件名稱。在Unix系統(tǒng)上,在命名的臨時(shí)文件處于打開(kāi)狀態(tài)時(shí),可以使用該名稱打開(kāi)生成的文件。

NamedTemporaryFile函數(shù)的調(diào)用格式與TemporaryFile函數(shù)的非常相似,唯一不同的是具有了一個(gè)delete參數(shù):

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

delete參數(shù)選項(xiàng):如果該參數(shù)為True(默認(rèn)),則文件一關(guān)閉則被刪除。返回的對(duì)象始終是一個(gè)類文件對(duì)象,其文件屬性是底層的真實(shí)文件對(duì)象。也就是說(shuō),這個(gè)類文件對(duì)象可以在with上下文管理中使用,就像普通文件一樣。

3、假脫機(jī)模式高級(jí)臨時(shí)文件對(duì)象創(chuàng)建函數(shù):SpooledTemporaryfile

SPOOL技術(shù)簡(jiǎn)介:

SPOOL是Simultaneous Peripheral Operation On-Line
(即外部設(shè)備聯(lián)機(jī)并行操作)的縮寫,它是關(guān)于慢速字符設(shè)備如何與計(jì)算機(jī)主機(jī)交換信息的一種技術(shù),通常稱為“假脫機(jī)技術(shù)”。其實(shí),嚴(yán)格意義上說(shuō),SPOOL系統(tǒng)既不同于脫機(jī)方式,也不同于直接耦合方式,SPOOL技術(shù)實(shí)際上是一種外圍設(shè)備同時(shí)聯(lián)機(jī)操作技術(shù),又稱為排隊(duì)轉(zhuǎn)儲(chǔ)技術(shù)。它在輸入和輸出之間增加了“輸入井”和“輸出井”的排隊(duì)轉(zhuǎn)儲(chǔ)環(huán)節(jié),以消除用戶的“聯(lián)機(jī)”等待時(shí)間。

SpooledTemporaryFile()函數(shù)除了數(shù)據(jù)會(huì)在內(nèi)存中進(jìn)行假脫機(jī)外,與TemporaryFile()完全相同。直到文件大小超過(guò)max_size或直到調(diào)用文件的fileno()方法,此時(shí)使用與TemporaryFile()一樣的操作,將內(nèi)容寫入磁盤。

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

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

4、高級(jí)臨時(shí)目錄創(chuàng)建函數(shù):TemporaryDirectory

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

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

調(diào)用該函數(shù)后,創(chuàng)建的目錄名可以從返回對(duì)象的name屬性中檢索到。當(dāng)返回的對(duì)象作為上下文管理器時(shí),該名稱將被分配給with語(yǔ)句中as子句的目標(biāo)。另外,可以通過(guò)調(diào)用cleanup()方法顯式清理目標(biāo)。

5、底層臨時(shí)文件/目錄創(chuàng)建函數(shù):mkstemp和mkdtemp

底層臨時(shí)文件創(chuàng)建函數(shù)mkstemp()

mkstemp()函數(shù)以盡可能安全的方式創(chuàng)建臨時(shí)文件,與TemporaryFile()函數(shù)不同,用戶需要負(fù)責(zé)臨時(shí)文件的刪除。其調(diào)用格式如下所示:

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

函數(shù)參數(shù)選項(xiàng):

  • (1)suffix:文件后綴,默認(rèn)為None。如果不是None,文件名將以設(shè)置的后綴結(jié)尾。注意,mkstemp()函數(shù)不會(huì)在文件名和后綴之間加一個(gè)點(diǎn),如果需要可以自行添加。

  • (2)prefix:文件前綴,默認(rèn)為None。如果不是None,文件以該前綴為開(kāi)頭;否則使用默認(rèn)前綴,默認(rèn)的前綴是由gettempprefix()或gettempprefixb()的返回值確定。

  • (3)dir:文件創(chuàng)建的目錄,默認(rèn)為None,如果不是None,則使用默認(rèn)目錄;默認(rèn)目錄是從所使用的系統(tǒng)列表中選擇的,但是用戶可以通過(guò)設(shè)置TMPDIR、TEMP或TMP環(huán)境變量來(lái)控制目錄位置。

  • (4)text:文本類型,默認(rèn)為False,即以二進(jìn)制模式打開(kāi)。如果為true,則以文本格式打開(kāi)。

mkstemp()返回一個(gè)元組,該元組包含一個(gè)用于打開(kāi)文件的操作系統(tǒng)級(jí)別(OS-leve)句柄(有os.open()函數(shù)返回)和該文件絕對(duì)路徑名。

底層臨時(shí)目錄創(chuàng)建函數(shù)mkdtemp()

mkdtemp()函數(shù)以盡可能安全的方式創(chuàng)建臨時(shí)目錄。只有通過(guò)用戶ID才能讀取、寫入和搜索目錄,同時(shí)用戶負(fù)責(zé)刪除臨時(shí)目錄及其內(nèi)容。其調(diào)用格式和參數(shù)與mkstemp()相同,這里就不展開(kāi)介紹了。注意,mkdtemp()函數(shù)只返回新建目錄的絕對(duì)路徑。

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

1、返回臨時(shí)文件夾名函數(shù):gettempdir和gettempdirb

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

Python內(nèi)部搜索一個(gè)標(biāo)準(zhǔn)目錄列表,用戶可以在其中創(chuàng)建文件的目錄:

  • (1)由TMPDIR環(huán)境變量命名的目錄;

  • (2)由TEMP環(huán)境變量命名的目錄;

  • (3)由TMP環(huán)境變量命名的目錄。

  • (4)不同平臺(tái)特定的位置:

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

  • (5)當(dāng)前工作目錄。

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

2、返回臨時(shí)文件前綴函數(shù):gettempprefix和gettempprefix

gettempprefix以文本格式返回創(chuàng)建的臨時(shí)文件的前綴;gettempprefixb以二進(jìn)制格式返回創(chuàng)建的臨時(shí)文件的前綴。

到此,關(guān)于“Python的tempfile模塊怎么用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI