我在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/

10-10 19:09