Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python人员使用哪个路径模块或类来代替os.path?_Python_Path - Fatal编程技术网

Python人员使用哪个路径模块或类来代替os.path?

Python人员使用哪个路径模块或类来代替os.path?,python,path,Python,Path,只是想知道有多少人使用Python中的路径模块,比如Jason Orendorff的模块,而不是使用os.path来连接和分割路径?您是否使用过: (为政治公众人物355更新) ,基本上是上述内容的更现代版本 它是tuple而不是str的子类 我知道Jason的路径模块被BDFL制作并拒绝。这似乎主要是因为它试图在一节课上做所有的事情 我们的用例主要是简化路径的连接和拆分组件,因此如果这样的路径类只实现拆分/联接类型的操作,我们会非常高兴。谁不想这样做: path(build_dir, pa

只是想知道有多少人使用Python中的路径模块,比如Jason Orendorff的模块,而不是使用
os.path
来连接和分割路径?您是否使用过:

  • (为政治公众人物355更新)
  • ,基本上是上述内容的更现代版本
  • 它是tuple而不是str的子类
我知道Jason的路径模块被BDFL制作并拒绝。这似乎主要是因为它试图在一节课上做所有的事情

我们的用例主要是简化路径的连接和拆分组件,因此如果这样的路径类只实现拆分/联接类型的操作,我们会非常高兴。谁不想这样做:

path(build_dir, path(source_file).name)
或者这个:

build_dir / path(source_file).name
与此相反:

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

我可以拿起一个Python程序,毫不犹豫地解释当前的标准方法——它是明确的,没有歧义:

os.path.join(build_dir, os.path.basename(source_file))
Python的动态类型使第一种方法在阅读时很难理解:

build_dir / path(source_file).name
此外,分割字符串并不常见,这会带来更多的混乱。我怎么知道这两个不是整数?还是浮动?如果两种类型最终都是非字符串类型,则在运行时不会出现TypeError

最后,

path(build_dir, path(source_file).name)
这比os.path方法好多少

虽然他们可能会“简化”编码(即,使其更易于编写),但如果其他不熟悉替代模块的人需要维护代码,您将遇到冲突


所以我想我的答案是:我不使用替代路径模块。os.path已经具备了我所需要的一切,它的界面也不错。

分割字符串以连接路径可能看起来像是一个“巧妙的技巧”,但正是Python程序员喜欢避免的事情(顺便说一句,大多数其他语言中的程序员也是如此。)os.path模块被广泛使用,并且容易被所有人理解。另一方面,用重载操作符做一些令人困惑的事情,它会损害代码的可读性,而这正是Python的优点之一


另一方面,C++程序员喜欢这种东西。也许这是C++代码难以阅读的原因之一。

< P>一个简单但有用的技巧是:

导入操作系统

Path=os.Path.join

然后,与此相反:

os.path.join(build_dir, os.path.basename(source_file))
join(build_dir,os.path.basename(源文件))

您可以这样做:

路径(生成目录,路径(源文件))


听!标准os.path模块没有什么可怕的错误,可以保证向项目中添加更多依赖项。如果您有一个特别棘手的路径构造问题,比如从对象层次结构中构造路径,那么为什么不将其包装到函数中呢?下一个程序员将感谢您封装了它,感谢您没有让他学习和调试整个其他模块。谢谢您的回答,Matthew。很好的评论,塞伦:你把东西分解成函数是对的——这已经简化了我的脚本。事实上,我认为你们两个已经说服了我们。另外,如果我们只想更简洁一点,我想总有“从操作系统导入路径”的。没有歧义,没错,但写和读都很痛苦。我宁愿处理Java之类的不可变路径对象,而不是字符串。例如:
使用build_dir.child('config.yaml').open()作为f
vs
使用open(os.path.join(build_dir,'config.yaml'))作为f
——逻辑流从左到右更加一致,嵌套的括号更少,因此更易于阅读和理解。我一直都这样做,但我使用
pj
,而不是
path
)您是否愿意解释为什么可以用另一个
path=os.path.join
实例替换
os.path.basename
?因为对我来说,
os.path.join(r“C:\Build”,os.path.basename(r“D:\Source\code.py”)
返回
'C:\\Build\\code.py'
,而
路径(r“C:\Build”,path(r“D:\Source\code.py”)
返回
'D:\\Source\\code.py'
。看起来像是这样的。