具有自定义名称的临时文件/目录?

问题描述 投票:0回答:3

如何在 python 中创建具有用户定义名称的临时文件/目录。我知道 tempfile 。但是我看不到任何以文件名作为参数的函数。

注意:我需要这个来对包含临时文件的临时目录上的 glob(文件名模式匹配)功能进行单元测试,而不是使用实际的文件系统。

python pytest temporary-files python-unittest
3个回答
7
投票

如果您需要命名临时文件和目录,看起来您必须自己管理名称和/或创建/删除。

但是,如果您只需要控制文件的名称,您可以使用

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

0
投票

我几乎更喜欢使用

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() 之后更新文件描述符


-1
投票

您可以将

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
在临时目录中创建文件。

© www.soinside.com 2019 - 2024. All rights reserved.