【问题标题】:split twice in the same expression?在同一个表达式中拆分两次?
【发布时间】:2010-09-24 08:38:01
【问题描述】:

想象一下我有以下几点:

inFile = "/adda/adas/sdas/hello.txt"

# that instruction give me hello.txt
Name = inFile.name.split("/") [-1]

# that one give me the name I want - just hello
Name1 = Name.split(".") [0]

有没有机会用一个表达式来简化做同样的工作?

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以通过使用os.path.basename 获取路径的最后一部分,然后使用os.path.splitext 获取不带扩展名的文件名,从而独立获取您想要的平台。

    from os.path import basename, splitext
    
    pathname = "/adda/adas/sdas/hello.txt"
    name, extension = splitext(basename(pathname))
    print name # --> "hello"
    

    使用os.path.basenameos.path.splitext 代替str.split,或者re.split 更合适(因此获得的分数比任何其他答案都多),因为它不会分解其他platforms that use different path separators (you would be surprised how varried this can be)

    它也获得了最多的分数,因为它准确地回答了“一条线”的问题,并且在美学上比你的例子更令人愉悦(尽管这与所有品味问题一样值得商榷)

    【讨论】:

    • 这是正确的解决方案,但没有回答问题。我的是相反的:-) +1。
    • @Vinko Vrsalovic 你的不是相反,它完美地回答了你的问题。
    • 我所说的“逆”是指它回答了问题,但它不是正确的解决方案。
    • @Vinko Vrsalovic:为什么不合适?
    • 美化了一下,随意回滚
    【解决方案2】:

    回答主题中的问题,而不是试图分析示例......

    如果你想分割路径,你真的很想使用Florians 解决方案,但如果你承诺不使用它来解析路径......

    您可以使用re.split() 使用多个分隔符进行拆分,方法是:使用“|”将它们分开,看看这个:

    import re
    inFile = "/adda/adas/sdas/hello.txt"
    print re.split('\.|/', inFile)[-2]
    

    【讨论】:

      【解决方案3】:
      >>> inFile = "/adda/adas/sdas/hello.txt"
      >>> inFile.split('/')[-1]
      'hello.txt'
      >>> inFile.split('/')[-1].split('.')[0]
      'hello'
      

      【讨论】:

        【解决方案4】:

        如果它总是像上面这样的路径,你可以使用 os.path.split 和 os.path.splitext

        下面的例子将只打印你好

        from os.path import split, splitext
        path = "/adda/adas/sdas/hello.txt"
        print splitext(split(path)[1])[0]
        

        欲了解更多信息,请参阅https://docs.python.org/library/os.path.html

        【讨论】:

        • +1 用于手动交叉引用。这总是有帮助的。给某人一条鱼……教某人如何钓鱼……
        【解决方案5】:

        我很确定一些 Regex-Ninja*,会给你一种或多或少理智的方式来做到这一点(或者我现在看到其他人已经发布:在一行上写两个表达式的方法......)

        但我想知道你为什么要用一个表达式来拆分它? 对于这样一个简单的拆分,做两个可能比创建一些高级的非此即彼的逻辑要快。如果你分裂两次它也更安全:

        我猜你想分开路径,文件名和文件扩展名,如果你在'/'上分割你知道文件名应该在最后一个数组索引中,那么你可以尝试只分割最后一个索引看看你是否能找到文件扩展名。那么你就不需要关心路径名中是否有点。

        *(任何理智正则表达式的用户,不应该被冒犯。;)

        【讨论】:

          猜你喜欢
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 2015-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-07
          • 2022-11-23
          相关资源
          最近更新 更多