正確的使用Python臨時檔案

2022-09-25 22:57:15 字數 1488 閱讀 6605

臨時檔案通常用來儲存無法儲存在記憶體中的資料,或者傳遞給必須從檔案讀取的外部程式。一般我們會在/tmp目錄下生成唯一的檔名,但是安全的建立臨時檔案並不是那麼簡單,需要遵守許多規則。永遠不要自己去嘗試做這件事,而是要借助庫函式實現。而且也要小心清理臨時檔案。

臨時檔案引起的最大問題就是,可以**檔名,導致惡意使用者可以**臨時檔名,從而建立軟鏈結劫持臨時檔案。

建立臨時檔案一般使用的模組就是tempfile,此模組庫函式常用的有以下幾個:

tempfile.mktemp # 不安全,禁止使用

tempfile.mkstemp # 隨機建立tmp檔案,預設建立的檔案在/tmp目錄,當然也可以指定(可以使用)

tempfile.temporaryfile # 記憶體中建立檔案檔案不會儲存在磁碟,關閉後即刪除(可以使用)

te 當delete=true時,作用跟上面一樣,當是false時,會儲存在磁碟(可以使用)

以下幾種方式分別介紹了安全的建立臨時檔案及不安全的方式。

不正確1:

import os

import tempfile

# this will most cerwww.cppcns.comtainly put you at risk

tmp = os.path.join(tempfile.gettempdir(), filename)

if not os.path.exists(tmp):

with open(tmp, "w") file:

file.write("defaults")

不正確2:

import os

import tempfile

open(tempfile.mktemp(), "w")

不正確3:

filename = "{}/{}.tmp".format(tempfile.gettempdir(), os.getpid())

open(filename, "w")

正確1:

fd, path = tempfile.mkstemp()

try:

with os.fdopen(fd, 'w') as tmp:

# do stuff with temp file

tmp.write('stuff')

finally:

os.remove(path)

正確2:

# 控制代碼關閉,檔案即刪除

with tempfile.temporaryfile() as tmp:

# do stuff with tmp

tmp.write('stuff')

正確3:

tmp = twww.cppcns.comempfile.namedtemporaryfile(delete=true)

try:

# do stuff with temp

tmp.write('stuff')

finally:

tmp.close() # 檔案關閉即刪除

如何使用臨時檔案

python為我們提供了乙個標準庫來處理臨時檔案,所誤謂臨時檔案就是寫在硬碟上,關機就刪除,臨時檔案分為有名字的和無名字的,分別對應為 temporaryfile namedtempporaryfile,這裡不討論python2.x寫法,form tempfile import temporaryf...

bash 臨時檔案

1.臨時檔案目錄 tmp 使用者可以隨時隨地利用mktemp命令建立臨時檔案與 tmp目錄,這個目錄在每次系統啟動時都會被清空,因此裡面的檔案都是臨時使用的 不能永久儲存 用完就不管的。任何賬戶都有權在 tmp目錄下建立臨時檔案,完整的讀寫許可權全都給建立它的屬主,並且其它賬戶無權訪問它。2.使用m...

android臨時檔案

activity 1.啟動乙個新的activity 會呼叫oncreate onstart onresume 2.onpause protected void oncreate protected void onstart 當activity被使用者看到時,呼叫 protected void onr...