如何在Python中创建tmp文件?

Sup*_*ing 55 python

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

some_obj.file_name(FILE_PATH)
Run Code Online (Sandbox Code Playgroud)

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

我想在我的python脚本中创建一个文件FILE_NAME.ext,其中包含字符串的内容:

some_string = 'this is some content'
Run Code Online (Sandbox Code Playgroud)

怎么去这个?Python脚本将放在Linux框中.

Min*_*ras 115

我想你正在寻找这个:http://docs.python.org/library/tempfile.html

import tempfile
with tempfile.NamedTemporaryFile() as tmp:
    print(tmp.name)
    tmp.write(...)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,基于问题的主题,谷歌注意到,而不是SuperString的特殊问题 (5认同)
  • 并且如果您想控制将其分配到的目录,可以将一个可选的`dir = path` arg传递给`NamedTemporaryFile`。 (2认同)

Con*_*ius 56

有一个python tempfile模块,但简单的文件创建也可以解决问题:

new_file = open("path/to/FILE_NAME.ext", "w")
Run Code Online (Sandbox Code Playgroud)

现在您可以使用以下write方法写入它:

new_file.write('this is some content')
Run Code Online (Sandbox Code Playgroud)

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

import tempfile

new_file, filename = tempfile.mkstemp()

print(filename)

os.write(new_file, "this is some content")
os.close(new_file)
Run Code Online (Sandbox Code Playgroud)

随着mkstemp你负责删除文件,你用它做了.使用其他参数,您可以影响文件的目录和名称.


UPDATE

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

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)
Run Code Online (Sandbox Code Playgroud)

os.fdopen文件描述符包装在Python文件对象中,该文件对象在with退出时自动关闭.os.remove不再需要时删除文件的调用.

  • 确实应该对此进行更新,以提供在python中创建临时文件的安全方法。这是一些例子。https://security.openstack.org/guidelines/dg_using-temporary-files-securely.html (3认同)