每当我想处理文件或目录时,今天的方法是使用 pathlib
。
pathlib
很棒、方便、易于使用且独立于操作系统。
但是,一些库仍然希望我使用 os.path
。
如何将我的 Path
转换为老式版本?
在下面的示例中,我应该如何处理我的 p
?
from pathlib import Path
p = Path.cwd()
some_old_function(p) # <---- error
最佳答案
一些库仍然希望我使用 os.path
这句话似乎让您感到困惑。 os.path
是一个简单地将路径视为 strings 的模块 - 而 pathlib
则将它们视为专门的OOP 方法中的对象。
为了在两种表示之间创建一个简单且定义明确的转换,Python 3.6 中引入了 PEP 519。它引入了一个新的抽象类 - PathLike
- 和一个新的 os
函数 - fspath
。任何希望实现路径对象(包括 pathlib
)的 API/库都应继承 PathLike
并实现 __fspath__
方法(将调用通过 os.fspath
)。
The main rationale 因为使用 str(path)
容易出错 - 许多对象都有字符串表示(str(None)
给出 "None"
),但不应将它们全部视为路径。
专门用于 pathlib
(在撰写本文时),the implementation of __fspath__
is basically just a wrapper over str()
,但您仍然应该更喜欢使用它,以防它将来发生变化。
请注意,在将参数传递给大多数内置函数时,您不需要实际调用 os.fspath
。大多数 os.path
函数已更改为接受 PathLike
而不是字符串,并且已经在其上使用了 os.fspath
(可以在 the docs 中看到在 3.6 版中更改:接受类似路径的对象。 在大多数函数下)。因此,您可以简单地将 Path
对象按原样传递给它们中的大多数。
关于python - 如何从 Path 切换到 os.path,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65313454/