Python开发者使用哪个路径模块或类替代os.path?

9 投票
3 回答
5215 浏览
提问于 2025-04-15 13:29

我在想,有多少人会使用像Jason Orendorff的路径模块,而不是用os.path来连接和拆分路径呢?你有没有用过:

我知道Jason的路径模块被纳入了PEP 355,但被BDFL拒绝了。看起来主要是因为它试图在一个类中做所有事情。

我们的使用场景主要是为了简化路径组件的连接和拆分,所以如果这样的路径类只实现拆分和连接的操作,我们会非常满意。谁不想这样做呢:

path(build_dir, path(source_file).name)

或者这样:

build_dir / path(source_file).name

而不是这样:

os.path.join(build_dir, os.path.basename(source_file))

3 个回答

-1

把字符串分开来连接路径可能看起来像是个“聪明的把戏”,但正是这种做法,Python程序员通常会避免使用(顺便说一下,其他大多数语言的程序员也是如此)。os.path模块被广泛使用,大家都能很容易理解。而用重载运算符做一些奇怪的操作就会让人困惑,这会影响代码的可读性,而可读性本来就是Python的一大优势。

另一方面,C++程序员却喜欢这种做法。也许这就是为什么C++代码有时会那么难以阅读的原因之一。

2

这里有一个简单但很实用的小技巧:

首先,导入一个叫做os的模块。

然后,把os.path.join这个功能简化为一个更短的名字,叫做Path。

这样,你就可以用更简单的方式来写代码,而不是像这样:

os.path.join(build_dir, os.path.basename(source_file))

你可以这样写:

Path(build_dir, Path(source_file))

11

我可以很轻松地理解一个Python程序的标准写法,因为它很明确,没有什么模糊的地方:

os.path.join(build_dir, os.path.basename(source_file))

不过,Python的动态类型让第一种方法在阅读时有点难懂:

build_dir / path(source_file).name

而且,分割字符串并不常见,这就更让人困惑了。我怎么知道那两个不是整数?或者浮点数?如果它们最后变成了非字符串类型,你在运行时是不会遇到类型错误的。

最后,

path(build_dir, path(source_file).name)

那和os.path的方法有什么好处呢?

虽然这些方法可能“简化”了编码(也就是让写代码变得更简单),但如果有其他人不熟悉这些替代模块需要维护代码,你就会遇到麻烦。

所以我想我的答案是:我不使用替代的路径模块。os.path已经有我需要的所有功能,而且它的界面也还不错。

撰写回答