代码之家  ›  专栏  ›  技术社区  ›  DonnRK

从python中的临时目录读取:typeerror:应为str、bytes或os.pathlike对象,而不是temporary directory

  •  1
  • DonnRK  · 技术社区  · 6 年前

    我在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是Python3.x的首选方法。对于这个用例,有什么想法可以解释为什么这会引发错误,或者这些方法中的一个比另一个更好吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   gkw    5 年前

    我不知道为什么会发生错误,但解决错误的方法之一是调用 .name TemporaryDirectory :

    >>> t_dir = tempfile.TemporaryDirectory()
    >>> os.path.join(t_dir.name, 'sample.png')
    '/tmp/tmp8y5p62qi/sample.png'
    >>>
    

    你就可以跑了 t_dir.cleanup() 删除 临时董事会 后来。

    我想是的。 名字 应该在 TemporaryDirectory docs ,我是通过跑步发现的 dir(t_dir) .