如何在 python 中创建具有用户定义名称的临时文件/目录。我知道 tempfile 。但是我看不到任何以文件名作为参数的函数。
注意:我需要这个来对包含临时文件的临时目录上的 glob(文件名模式匹配)功能进行单元测试,而不是使用实际的文件系统。
如果您需要命名临时文件和目录,看起来您必须自己管理名称和/或创建/删除。
但是,如果您只需要控制文件的名称,您可以使用
tempfile.TemporaryDirectory()
创建一个临时目录,在该目录中使用您想要的任何名称创建文件,然后当它退出时,它将全部被删除上下文。
像这样:
with tempfile.TemporaryDirectory() as temp_dir:
# open your files here
named_file = open(os.path.join(temp_dir, "myname.txt"), 'w')
# do what you want with file...
# directory and files get automatically deleted here...
附加示例:
>>> import tempfile
>>> t = tempfile.TemporaryDirectory()
>>> print(t)
<TemporaryDirectory '/tmp/tmpqign52ry'>
>>> print(t.name)
/tmp/tmpqign52ry
我几乎更喜欢使用
NamedTemporaryFile()
以这种复杂的方式编写,而不是使用 open()
,因为我真的想强调这是一个临时文件:
import tempfile, os
with tempfile.NamedTemporaryFile() as temp_fp:
os.rename(temp_fp.name, '/tmp/my_custom_name.txt')
# do stuff here ...
# do stuff here END ...
os.rename('/tmp/my_custom_name.txt', temp_fp.name) # finally, rename back
我们需要重新命名,因为: 在 os.rename() 之后更新文件描述符
您可以将
open()
与您需要的任何文件名一起使用。
例如
open(name, 'w')
或者
import os
import tempfile
print 'Building a file name yourself:'
filename = '/tmp/guess_my_name.%s.txt' % os.getpid()
temp = open(filename, 'w+b')
try:
print 'temp:', temp
print 'temp.name:', temp.name
finally:
temp.close()
# Clean up the temporary file yourself
os.remove(filename)
或者您可以使用
mkdtemp
创建临时目录,然后使用 open
在临时目录中创建文件。