我在python中创建了一个临时目录,我在其中保存了一堆.png文件供以后使用。我的代码似乎可以正常工作,直到需要访问那些.png文件的位置-执行此操作时,出现以下错误:
TypeError: expected str, bytes or os.PathLike object, not TemporaryDirectory
当我在os.path.join中传递临时目录时,抛出该错误:
import os
import tempfile
t_dir = tempfile.TemporaryDirectory()
os.path.join (t_dir, 'sample.png')
Traceback (most recent call last):
File "<ipython-input-32-47ee4fce12c7>", line 1, in <module>
os.path.join (t_dir, 'sample.png')
File "C:\Users\donna\Anaconda3\lib\ntpath.py", line 75, in join
path = os.fspath(path)
TypeError: expected str, bytes or os.PathLike object, not TemporaryDirectory
但是,使用gettempdir()似乎可以正常工作。
import os
import tempfile
t_dir = tempfile.gettempdir()
os.path.join (t_dir, 'sample.png')
python文档建议tempfile.TemporaryDirectory使用与tempfile.mkdtemp()(https://docs.python.org/3.6/library/tempfile.html#tempfile.TemporaryDirectory)相同的规则工作,我认为tempfile.TemporaryDirectory是python 3.x的首选方法。有什么想法为什么会引发错误,或者在此用例中,如果其中一种方法比另一种方法更可取?
最佳答案
我不确定为什么会发生错误,但是解决该错误的一种方法是在.name
上调用TemporaryDirectory
:
>>> t_dir = tempfile.TemporaryDirectory()
>>> os.path.join(t_dir.name, 'sample.png')
'/tmp/tmp8y5p62qi/sample.png'
>>>
然后,您可以运行t_dir.cleanup()
稍后再删除TemporaryDirectory
。FWIW,我认为TemporaryDirectory docs中应该提到
.name
,我通过运行dir(t_dir)
发现了这一点。 (编辑:现在提到)您应该考虑将其放在
with
语句中,例如改编自上面链接的官方文档中的一个:# create a temporary directory using the context manager
with tempfile.TemporaryDirectory() as t_dir:
print('created temporary directory', t_dir)
关于python - 从python : TypeError: expected str,字节或os.PathLike对象的临时目录中读取,而不是TemporaryDirectory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51686130/