d3pd
d3pd

Reputation: 8315

In Python, how should one extract the second-last directory name in a path?

I have a string like the following:

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

How should I extract the "2.0.24" from this string? I'm not sure how to split the string using the slashes (in order to extract the second last element of the resultant list) and I'm not sure if this would be a good approach. What I have right now is the following:

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

Upvotes: 10

Views: 15938

Answers (6)

Daniel Braun
Daniel Braun

Reputation: 2712

cross platform solution:

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

Upvotes: 5

ZdaR
ZdaR

Reputation: 22954

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'

Upvotes: -1

AlG
AlG

Reputation: 15157

You can also do:

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

results in

'2.0.24'

Upvotes: 12

GLHF
GLHF

Reputation: 4035

import re

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

You can use regex-findall method. t returns a list, so using join().

Output;

>>> 
2.0.24
>>> 

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

Upvotes: -2

Avinash Raj
Avinash Raj

Reputation: 174706

Just split according to the / symbol then print the second index from the last.

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

Upvotes: 3

Slam
Slam

Reputation: 8572

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

Upvotes: 10

Related Questions