學習如何正確使用Python臨時文件

coldplay.xixi
發布: 2021-03-29 10:57:10
轉載
2317 人瀏覽過

學習如何正確使用Python臨時文件

1、前言

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

臨時檔案引起的最大問題是,可以預測檔案名,導致惡意使用者可以預測臨時檔案名,從而創建軟連結劫持臨時檔案。

相關免費學習推薦:python影片教學

2、tempfile模組介紹

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

  • tempfile.mktemp # 不安全,禁止使用
  • tempfile.mkstemp # 隨機建立tmp檔案,預設建立的檔案在/tmp目錄,當然也可以指定(可以使用)
  • tempfile.TemporaryFile # 記憶體中建立文件,檔案不會儲存在磁碟,關閉後即刪除(可以使用)
  • tempfile.NamedTemporaryFile(delete=True) 當delete=True時,作用跟上面一樣,當是False時,會儲存在磁碟(可以使用)

3、範例介紹

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

3.1 不正確範例:

不正確1:

import os
import tempfile
 
# This will most certainly 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")
登入後複製

#3.2 正確範例

正確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 = tempfile.NamedTemporaryFile(delete=True)
try:
    # do stuff with temp
    tmp.write('stuff')
finally:
    tmp.close()  # 文件关闭即删除
登入後複製

相關免費學習推薦:python教學(影片)

#

以上是學習如何正確使用Python臨時文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!