如何在Python中创建tmp文件?

时间:2011-12-20 14:40:49

标签: python

我有这个引用文件路径的函数:

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框中。

2 个答案:

答案 0 :(得分:97)

我认为你正在寻找:http://docs.python.org/library/tempfile.html

import tempfile
with tempfile.NamedTemporaryFile() as tmp:
    print(tmp.name)
    tmp.write(...)

可是:

  

这个名称是否可以用来第二次打开文件,而命名的临时文件仍然是打开的,因此不同平台(它可以在Unix上使用;它不能在Windows NT或更高版本上使用)。

如果您担心这一点:

import os, tempfile
tmp = tempfile.NamedTemporaryFile(delete=False)
try:
    print(tmp.name)
    tmp.write(...)
finally:
    os.unlink(tmp.name)
    tmp.close()

答案 1 :(得分:49)

python有tempfile module,但创建一个简单的文件也可以:

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

现在您可以使用write方法写信给它:

new_file.write('this is some content')

使用tempfile模块,这可能如下所示:

import tempfile

new_file, filename = tempfile.mkstemp()

print(filename)

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

使用mkstemp,您有责任在完成后删除该文件。使用其他参数,您可以影响文件的目录和名称。


<强>更新

正如Emmet Speer正确指出的那样,使用mkstemp时有security considerations,因为客户端代码负责关闭/清理创建的文件。处理它的更好方法是以下代码段(取自链接):

import os
import tempfile

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的调用会在不再需要时删除该文件。