【问题标题】:In Python, how should one extract the second-last directory name in a path?在 Python 中,应该如何提取路径中倒数第二个目录名?
【发布时间】:2015-04-05 13:33:04
【问题描述】:

我有如下字符串:

/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore

我应该如何从这个字符串中提取“2.0.24”?我不确定如何使用斜杠拆分字符串(以便提取结果列表的倒数第二个元素),我不确定这是否是一个好方法。我现在拥有的是以下内容:

"/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore".split("/RootCore")[0].split("AnalysisTop/")[1]

【问题讨论】:

  • 数字是否可变?
  • 数字可能会改变,是的。

标签: python string path split slash


【解决方案1】:
'/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore'.split('/')[-2]

【讨论】:

  • 这不能跨所有文件系统移植。例如,Windows 使用 `` 来分隔目录
【解决方案2】:

只需根据/ 符号拆分,然后打印倒数第二个索引。

>>> x = "/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore"
>>> y = x.split('/')
>>> y[-2]
'2.0.24'

【讨论】:

  • 那么如果字符串末尾有2个以上的字符串怎么办? split('/')[-2] 会失败
【解决方案3】:
path = "/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore"
path_dirs = path.split("/")

>>>> path_dirs
>>>> ['', 'cvmfs', 'atlas.cern.ch', 'repo', 'sw', 'ASG', 'AnalysisTop', '2.0.24', 'RootCore']

>>>> print path_dirs[-2]
>>>> '2.0.24'

【讨论】:

  • 抱歉修复了! @Trengot
【解决方案4】:
import re

str1 = "/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore"
t = re.findall("[0-9][.]*",str1)
print ("".join(t))

您可以使用regex-findall 方法。 t 返回一个列表,所以使用join()。

输出;

>>> 
2.0.24
>>> 

# print (t)
>>> 
['2.', '0.', '2', '4']
>>> 

【讨论】:

  • 这不是最好的解决方案。它可能在这种情况下有效,但不是通用的。如果你有 /aaa/bbb/11/a/13/ ...
  • 那么如果字符串末尾有两个以上的字符串怎么办? split('/')[-2] 将失败。点可能没有变化,所以我猜这是最好的。
【解决方案5】:

你也可以这样做:

import os
x = "/cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisTop/2.0.24/RootCore"
os.path.split(os.path.split(x)[0])[1]

结果

'2.0.24'

【讨论】:

  • 我不明白您为什么投了反对票。这是一种有趣的方法。
【解决方案6】:

跨平台解决方案:

import os
'your/path'.split(os.path.sep)[-2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多