2011-12-20 50 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