标准的python函数来分割路径?

时间:2012-05-10 00:17:59

标签: python path standard-library

注意:请不要为我编码。 我已经有一个自制功能来做我在下面描述的内容。

标准Python库 中是否有一个函数 ,它将绝对路径作为参数,并在删除后返回其所有“原子”路径组件的元组所有冗余的(例如./),解析像../等的位?例如,给定Unix路径/s//pam/../ham/./eggs,输出应为

('/', 's', 'ham', 'eggs')

并且给定Windows路径C:\s\\pam\..\ham\.\eggs,输出应为

('C:', '\\', 's', 'ham', 'eggs')

谢谢!

2 个答案:

答案 0 :(得分:2)

尽可能接近(AFAIR)标准的lib:

   >>> import os
   >>> help(os.path.split)
    Help on function split in odule ntpath:

    split(p)
        Split a pathname.
        Return tuple (head, tail) where tail is everything after the final slash.
        Either part may be empty.

这并不能解决你的用例问题,但可以轻松扩展它。 有关详细信息,请参阅注释。

答案 1 :(得分:0)

没有任何单一的功能可以做你想要的......主要是因为你所提出的问题从路径操纵的角度来看没有任何意义(因为丢弃{{1} }以有意义的方式改变路径。)

您可以采取以下措施:

..

这给了你:

[x for x in path.split(os.path.sep) if x not in ['.', '..']]

>>> path='/s//pam/../ham/./eggs'
>>> [x for x in path.split(os.path.sep) if x not in ['.', '..']]
['', 's', '', 'pam', 'ham', 'eggs']

(只要>>> path=r'C:\s\\pam\..\ham\.\eggs' >>> [x for x in path.split(os.path.sep) if x not in ['.', '..']] ['C:', 's', '', 'pam', 'ham', 'eggs'] os.path.sep)。

它显然不是你正在寻找的东西,但也许它指明了正确的方向。