0

注意:请不要为我编码。 我已经有一个家庭滚动功能来执行我在下面描述的操作。

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

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

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

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

谢谢!

4

2 回答 2

2

与标准库一样接近(AFAIR):

   >>> 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.

这并不能解决您的用例,但可以轻松扩展它。有关更多信息,请参阅评论。

于 2012-05-10T00:22:05.640 回答
0

没有一个函数可以做你想做的事……主要是因为从路径操作的角度来看,你所问的没有任何意义(因为丢弃..会以有意义的方式改变路径)。

您可以按照以下方式做一些事情:

[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\)。

这显然不是您要寻找的东西,但也许它指向了正确的方向。

于 2012-05-10T00:27:18.520 回答