python - 如何从 Path 切换到 os.path,反之亦然?

标签 python python-3.x pathlib os.path

每当我想处理文件或目录时,今天的方法是使用 pathlibpathlib 很棒、方便、易于使用且独立于操作系统。

但是,一些库仍然希望我使用 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/

相关文章:

python - 如何识别 Python3 中的视频格式?

python-3.x - python : Automatically reconnect ssh tunnel after remote server gone down

python - 如何使用 NumPy 在 Python 中快速填充 100000x100000 矩阵?

python - Pathlib 使用 Path.parents 访问 Path 时出错

Python 全局图像目录

python - 如何修补 `pathlib.Path.exists()` 方法?

python - 使用Python脚本查找IP和网关

python - 如何读取大文件(套接字编程和python)?

python - texreg 的 RPy bool 值

python - 在 python 3.5.x 中使用 `urllib` 意外加载模块