Python开发者使用哪个路径模块或类替代os.path?
我在想,有多少人会使用像Jason Orendorff的路径模块,而不是用os.path
来连接和拆分路径呢?你有没有用过:
- Jason的路径模块(更新了PEP 355)
- Mike Orr的Unipath,基本上是上面那个的更现代版本
- Noam Raphael的替代路径模块,这个是基于元组而不是字符串的
我知道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 个回答
把字符串分开来连接路径可能看起来像是个“聪明的把戏”,但正是这种做法,Python程序员通常会避免使用(顺便说一下,其他大多数语言的程序员也是如此)。os.path模块被广泛使用,大家都能很容易理解。而用重载运算符做一些奇怪的操作就会让人困惑,这会影响代码的可读性,而可读性本来就是Python的一大优势。
另一方面,C++程序员却喜欢这种做法。也许这就是为什么C++代码有时会那么难以阅读的原因之一。
这里有一个简单但很实用的小技巧:
首先,导入一个叫做os的模块。
然后,把os.path.join这个功能简化为一个更短的名字,叫做Path。
这样,你就可以用更简单的方式来写代码,而不是像这样:
os.path.join(build_dir, os.path.basename(source_file))
你可以这样写:
Path(build_dir, Path(source_file))
我可以很轻松地理解一个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已经有我需要的所有功能,而且它的界面也还不错。