天天看點

python 臨時檔案夾 的 tempfile子產品學習

 python的臨時檔案夾的tempfile子產品學習

應用程式經常要儲存一些臨時的資訊,這些資訊不是特别重要,沒有必要寫在配置檔案 裡,但又不能沒有,這時候就可以把這些資訊寫到臨時檔案裡。其實很 多程式在運作的時候,都會産生一大堆臨時檔案,有些用于儲存日志,有些用于儲存一些臨時資料,還有一些儲存一些無關緊要的設定。在windows作業系統 中,臨時檔案一般被儲存在這個檔案夾下:C:\Documents and Settings\User\Local Settings\Temp。其實我們最常用的IE浏覽器在浏覽網頁的時候,會産生大量的臨時檔案,這些臨時檔案一般是我們浏覽過的網頁的本地副本。 Python提供了一個tempfile子產品,用來對臨時資料進行操作。查閱Python手冊,裡面介紹了如下常用的方法:

tempfile.mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])

    mkstemp方法用于建立一個臨時檔案。該方法僅僅用于建立臨時檔案, 調用tempfile.mkstemp函數後,傳回包含兩個元素的元組,第一個元素訓示操作該臨時檔案的安全級别,第二個元素訓示該臨時檔案的路徑。參數 suffix和prefix分别表示臨時檔案名稱的字尾和字首;dir指定了臨時檔案所在的目錄,如果沒有指定目錄,将根據系統環境變量TMPDIR,TEMP或者TMP的設定來儲存臨時檔案;參數text指定了是否以文本的形式來操作檔案,預設為False,表示以二進制的形式來操作檔案。

tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])

    該函數用于建立一個臨時檔案夾。參數的意思與tempfile.mkdtemp一樣。它傳回臨時檔案夾的絕對路徑。

tempfile.mktemp([suffix=''[, prefix='tmp'[, dir=None]]])

    mktemp用于傳回一個臨時檔案的路徑,但并不建立該臨時檔案。

tempfile.tempdir

    該屬性用于指定建立的臨時檔案(夾)所在的預設檔案夾。如果沒有設定該屬性或者将其設為None,Python将傳回以下環境變量TMPDIR, TEMP, TEMP指定的目錄,如果沒有定義這些環境變量,臨時檔案将被建立在目前工作目錄。

tempfile.gettempdir()

    gettempdir()則用于傳回儲存臨時檔案的檔案夾路徑。

tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])

    該函數傳回一個 類檔案 對象(file-like)用于臨時資料儲存(實際上對應磁盤上的一個臨時檔案)。當檔案對象被close或者被del的時候,臨時檔案将從磁盤上删除。 mode、bufsize參數的單方與open()函數一樣;suffix和prefix指定了臨時檔案名的字尾和字首;dir用于設定臨時檔案預設的保 存路徑。傳回的類檔案對象有一個file屬性,它指向真正操作的底層的file對象。

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

    tempfile.NamedTemporaryFile函數的行為與tempfile.TemporaryFile類似,隻不過它多了一個delete 參數,用于指定類檔案對象close或者被del之後,是否也一同删除磁盤上的臨時檔案(當delete = True的時候,行為與TemporaryFile一樣)。

tempfile.SpooledTemporaryFile([max_size=0[, mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]])

    tempfile.SpooledTemporaryFile函數的行為與tempfile.TemporaryFile類似。不同的是向類檔案對象寫數 據的時候,資料長度隻有到達參數max_size指定大小時,或者調用類檔案對象的fileno()方法,資料才會真正寫入到磁盤的臨時檔案中。

使用 tempfile 子產品建立臨時檔案

tempfile 子產品允許你快速地建立名稱唯一的臨時檔案供使用.

-------------------------------------------------------------------------

import tempfile

import os

tempfile = tempfile.mktemp()    # 建立名稱唯一的臨時檔案供使用

print "tempfile", "=>", tempfile

file = open(tempfile, "w+b")    # 打開檔案

file.write("*" * 1000)                # 寫入檔案

file.seek(0)                            # 回到啟示位置

print len(file.read()), "bytes"

file.close()

try:

    os.remove(tempfile)       # 删除檔案

except OSError:

    pass

tempfile => C:\TEMP\~160-1

1000 bytes

-------------------------------------------------------------------------

TemporaryFile 函數會自動挑選合适的檔案名, 并打開檔案. 而且它會確定該檔案在關閉的時候會被删除.

 (在 Unix 下, 你可以删除一個已打開的檔案, 這時檔案關閉時它會被自動删除. 在其他平台上, 這通過一個特殊的封裝類實作.)

-------------------------------------------------------------------------

使用 tempfile 子產品打開臨時檔案

-------------------------------------------------------------------------

import tempfile

file = tempfile.TemporaryFile()   #  自動建立一個臨時檔案

for i in range(100):

    file.write("*" * 100)

file.close()  # 關閉檔案後,檔案會被自動删除