【问题标题】:Python Get complete string before last slashPython 在最后一个斜杠之前获取完整的字符串
【发布时间】:2023-01-07 00:01:16
【问题描述】:

我想在最后一次出现斜杠 (/) 之前获取完整的字符串路径

String : /d/d1/Projects/Alpha/tests
Output : /d/d1/Projects/Alpha

通过执行,我能够在最后一个斜杠之后获取字符串的最后一部分

String.split('/')[-1]

但我想得到"/d/d1/Projects/Alpha"

谢谢。

【问题讨论】:

    标签: python


    【解决方案1】:

    最简单的选项是 str.rpartition,它将为您提供字符串的三元组,包括最右边出现的给定分隔符之前、包括和之后:

    >>> String = "/d/d1/Projects/Alpha/tests"
    >>> String.rpartition("/")[0]
    '/d/d1/Projects/Alpha'
    

    对于在给定文件路径的情况下查找目录名称的特定情况(看起来像这样),您可能还喜欢os.path.dirname

    >>> import os.path
    >>> os.path.dirname(String)
    '/d/d1/Projects/Alpha'
    

    【讨论】:

    • os.path.dirname 是可行的方法,因为它与平台无关
    • @Samwise:如果我想用其他字符串替换最后一部分,请稍作调整,如何在上面完成,比如输出应该是'/d/d1/Projects/Alpha/workspace',这里测试被替换为工作空间?
    • @DeepSpace 我同意提供文件路径 dirname 是获取目录名称的最佳方式,但 OP 一般询问字符串并以文件路径为例,这与询问文件路径不同。 :) 这可能实际上不是本地文件路径,在这种情况下,os.path 可能不会做正确的事情。
    • @Bokambo 可以做String.rpartition("/")[0] + "/workspace"——或者再次,如果我们被允许假设这是一个本地文件路径,做os.path.join(os.path.dirname(String), "workspace")
    【解决方案2】:

    两种简单的方法:使用拆分正如你所做的,你可以使用split方法,然后使用join,如下所示,它应该可以工作:

    in_str = "/d/d1/Projects/Alpha/tests"
    out_str = '/'.join(in_str.split('/')[:-1]) # Joining all elements except the last one
    

    或者使用 os.path.dirname(会推荐,更清洁)

    in_str = "/d/d1/Projects/Alpha/tests"
    out_str = os.path.dirname(in_str)
    

    两者都给出了期待的结果

    【讨论】:

      【解决方案3】:

      使用str.rfind函数:

      s = '/d/d1/Projects/Alpha/tests'
      print(s[:s.rfind('/')])
      

      /d/d1/Projects/Alpha
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-10
        • 2015-06-21
        • 2020-05-04
        • 1970-01-01
        • 2016-03-18
        相关资源
        最近更新 更多