2011-12-20 93 views
21

我有這個功能引用文件的路徑:創建Python中的tmp文件

some_obj.file_name(FILE_PATH) 

其中FILE_PATH是文件的路徑,即「H的字符串:/path/FILE_NAME.ext 「

我要創造我的Python腳本中的文件FILE_NAME.ext用字符串的內容:

some_string = 'this is some content' 

如何去這個問題? python腳本將被放置在一個linux框中。我認爲我必須使用

import tempfile 
import os 
import sys 
os.getcwd() 

或沿着這些線。謝謝!

+0

打開方式 'W',然後關閉它,使用'os.touch(FNAME)'。 – khachik

+0

爲什麼你需要臨時文件呢? – plaes

+0

我有一個函數調用對象的FILE_PATH,所以它需要在那裏 – SuperString

回答

24

有一個用於Python的tempfile module,但一個簡單的文件創建也做的伎倆:

new_file.write('this is some content') 

有了:

new_file = open("path/to/FILE_NAME.ext", "w") 

現在,你可以把它用write方法寫tempfile模塊可能如下所示:

import tempfile 

new_file, filename = tempfile.mkstemp() 

print(filename) 

os.write(new_file, "this is some content") 
os.close(new_file) 

使用mkstemp您有責任在完成文件後刪除文件。使用其他參數,您可以影響文件的目錄和名稱。


UPDATE

作爲理所當然指出的Emmet Speer,使用mkstemp時,作爲客戶端代碼負責關閉/清理所創建的文件有security considerations。一個更好的方法來處理它是下面的代碼片段(如從鏈接所):

import os 

fd, path = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, 'w') as tmp: 
     # do stuff with temp file 
     tmp.write('stuff') 
finally: 
    os.remove(path) 

os.fdopen包裝在一個Python文件對象的文件描述符,即自動關閉with退出時。 os.remove的呼叫在不再需要時刪除文件。

+0

'mkstemp'的第二個參數是文件名。我認爲這對一些人可能很重要。你能提一下嗎? –

+0

@MartinThoma:嗯,文檔(https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp)說不然:'mkstemp'的參數是'prefix','suffix',''目錄'和'文本'。當然,它們都影響最終的文件名,但實際上指定完整的文件名是不可能的。 – Constantinius

+0

@Constantinus:糟糕,對不起,我不想寫參數但返回值。 –

62

我認爲你正在尋找這樣的:http://docs.python.org/library/tempfile.html

import tempfile 
f = tempfile.NamedTemporaryFile(delete=False) 
f.close() 
f.name 
+2

這是一個很好的答案,基於問題的主題,谷歌注意到,而不是SuperString的特殊問題 –

+0

duckduckgo是第一個:D – ZiTAL