如何在Python中切割文件路径

3

我很新于Python编程,想要切分文件夹路径。例如,如果我的原始路径是:

C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/elements/MexicoCity-Part1/

我希望能够获取这样的路径:
C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/

在Python中有哪些方法可以实现这个功能?


你有尝试过什么吗?Stack Overflow可以帮助你提问,这样社区就很乐意帮助你。 - tschale
3个回答

6
你可以使用 pathlib 模块:
from pathlib import Path

pth = Path('C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/')

print(pth)
print(pth.parent)
print(pth.parent.parent)  # C:/Users/arul/Desktop/jobs/project_folder

该模块有很多方便处理路径的方法:您也可以使用 parts 来解决您的问题,如下所示:
print('/'.join(pth.parts[:-2]))

在Python 2.7中,您可以使用os.path构建自己的parts函数:
from os import path

pth = 'C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/'

def parts(pth):
    ret = []
    head, tail = path.split(pth)
    if tail != '':
        ret.append(tail)
    while head != '':
        head, tail = path.split(head)
        ret.append(tail)
    return ret[::-1]

ret = path.join(*parts(pth)[:-2])
print(ret)  # C:/Users/arul/Desktop/jobs/project_folder

谢谢Hiro,但我希望这个用Python 2.7.13完成。 - arul

0
如果您只想按元素拆分,请使用此代码。
>>> path = 'C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/elements/MexicoCity-Part1/'
>>> path.split('elements')[0]
'C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/'

这种方法的一个缺点是,如果您在路径中多次遇到单词elements,它将失败。 在这种情况下,您可以执行以下操作:
>>> '/'.join(path.split('/')[:-3]) + '/'
'C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/'

假设您知道所需路径的深度。


看看我的解决方案 @arul - void
这个答案不应该被接受。@Coldspeed 如果路径有不同的文件分隔符怎么办?可以是 \ 或 /。 - void
好的,你说得有道理。但是你能否请不要在这里指责我呢?这不是一个比赛,看谁能获得最多的赞。在过去的10分钟里,你已经发表了3条评论,解释为什么我的答案是垃圾。好吧,你正在为集体知识库做出贡献,而不是参加德比赛马比赛。请相应地行事。谢谢。 - cs95
@s_vishnu 我还应该提一下,hiro protagonist的答案是最好的。 - cs95
说得很对。但有时候竞争是好的,甚至是伟大的。我在许多与Python相关的帖子中看到了这一点,这给了我动力。从某种意义上说,这让我变得更加积极。希望你也能这样理解 :) - void
显示剩余3条评论

-1
你可以像这样做:
folder = 'C:/Users/arul/Desktop/jobs/project_folder/shots/shot_folder/elements/MexicoCity-Part1/'

folder.rsplit('/', 3)[0]

str.rsplit() 通常会返回字符串中由分隔符分隔的单词列表(从右侧开始)。

欲了解更多详细内容,请参阅 文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接