我需要使用自定义名称创建NamedTemporaryFile。
我尝试设置name属性,但是没有用。
from tempfile import NamedTemporaryFile
f = NamedTemporaryFile(dir='/tmp/')
f.name = custom_name
当我尝试使用os.path.exists
时,文件名没有更改,旧名称返回true。
我已经查看过temp files/directories with custom names?,但是创建临时目录不适合我的用例。
答案 0 :(得分:0)
NamedTemporaryFile 没有 name
参数。名称由 tempfile._get_candidate_names
生成。可以修补它并提供您自己的名字。但是,您可以为生成的名称添加前缀和后缀,至少使名称的一部分可预测:
Python 3.6.9 (default, Nov 23 2019, 06:49:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from tempfile import NamedTemporaryFile
In [2]: file = NamedTemporaryFile(prefix='asdf_', mode='w+', suffix='.xlsx')
In [3]: file.name
Out[3]: '/tmp/asdf_uskygtov.xlsx'
这是猴子补丁的示例:
Python 3.6.9 (default, Nov 23 2019, 06:49:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import tempfile
In [2]: import itertools
In [3]: tempfile._get_candidate_names = lambda: itertools.repeat('my_file')
In [4]: file = tempfile.NamedTemporaryFile(mode='w+', prefix='', suffix='txt')
In [5]: file.name
Out[5]: '/tmp/my_filetxt'
In [6]: file = tempfile.NamedTemporaryFile(mode='w+', prefix='', suffix='.txt')
In [7]: file.name
Out[7]: '/tmp/my_file.txt'