2013-08-16 45 views
3

在Python中,你可以按如下方式創建一個臨時文件:python tempfile在哪裏寫入文件?

tempfile.TemporaryFile() 

然後你就可以寫它。在GNU/Linux系統中寫入的文件在哪裏?我似乎無法在/ tmp目錄或任何其他目錄中找到它。

謝謝

+3

[「在Unix下,該文件的目錄條目在創建文件後立即被刪除。」](http://docs.python.org/2 /library/tempfile.html#tempfile.TemporaryFile)。小心這個。 – user2357112

+0

當我嘗試:mytempfile.name我得到:\t 「」 –

回答

4

上的文件句柄看着.name確實是看到該文件存在的一種方式。在TemporaryFile(在* NIX系統上)的情況下,您會看到<fdopen>,表示打開的文件句柄,但沒有對應的目錄條目。如果您想保留指向底層文件的鏈接,則需要使用NamedTemporaryFile


如果你想控制臨時文件去,看看dir參數:

TemporaryFile使用mkstemp,其允許與dir參數設置的目錄:

如果指定了dir,該文件將在該目錄中創建;否則,使用默認目錄。默認目錄是從依賴於平臺的列表中選擇的,但應用程序的用戶可以通過設置TMPDIRTEMPTMP環境變量來控制目錄位置。

+0

file.name返回「」。是否有意義? –

+2

是的,它的確如此。 'TemporaryFile'只處理OS [文件描述符](https://en.wikipedia.org/wiki/File_descriptor),所以沒有可訪問的文件名。如果您想要一個具有可訪問路徑的文件,請使用['NamedTemporaryFile'](http://docs.python.org/2/library/tempfile.html#tempfile.NamedTemporaryFile)。閱讀['mkstemp'](http://docs.python.org/2/library/tempfile.html#tempfile.mkstemp)的文檔將有助於揭示這一點,並緩解任何困惑。 –

+2

@Loic:這意味着它是一個開放的文件句柄,而底層文件已經被取消鏈接。如果你需要文件名,使用'tempfile.NamedTemporaryFile()'。 –

7

調用tempfile.gettempdir() function

返回當前選擇在創建臨時文件的目錄

您可以更改臨時文件是由tempfile.tempdir value設置爲不同的目錄中創建的,如果你想要影響創建臨時文件的位置。從文檔報價,如果該值是None的規則如下:

如果TEMPDIR是任何上述功能的任何呼叫設置或設置爲None,Python的搜索目錄的標準列表,並TEMPDIR到第一個是主叫用戶可以創建文件的列表。該列表是:

  1. TMPDIR指定的目錄環境變量。
  2. TEMP環境變量命名的目錄。
  3. TMP環境變量命名的目錄。
  4. 特定於平臺的位置:
    • 在RiscOS上,由Wimp$ScrapDir環境變量命名的目錄。
    • 在Windows上,目錄C:\TEMP,C:\TMP,\TEMP\TMP按照該順序。
    • 在所有其他平臺上,按目錄/tmp,/var/tmp/usr/tmp的順序排列。
  5. 作爲最後的手段,當前的工作目錄。
1

外殼上嘗試這個

$python 
>>> import tempfile 
    >>>tempfile.gettempdir() 

'/var/folders/5r/lxh8g5ln7zg43_l_3t0j7b1c0000gn/T' 

這將顯示您Python是用實際的臨時路徑。

您可以選擇嘗試此操作。 (這將產生與上面相同的結果)

$python 
>>> import tempfile 
    >>>tempfile.tempdir 
'/var/folders/5r/lxh8g5ln7zg43_l_3t0j7b1c0000gn/T' 
+2

當您調用'tempfile.gettempdir()'時,會設置'tempfile.tempdir'; 'temfile.tempdir'將從'None'開始。 –