| I l@ve RuBoard |
|
4.16 Splitting a Path into All of Its PartsCredit: Trent Mick 4.16.1 ProblemYou want to process subparts of a file or directory path. 4.16.2 SolutionWe can define a function that uses os.path.split to break out all of the parts of a file or directory path: import os, sys
def splitall(path):
allparts = []
while 1:
parts = os.path.split(path)
if parts[0] == path: # sentinel for absolute paths
allparts.insert(0, parts[0])
break
elif parts[1] == path: # sentinel for relative paths
allparts.insert(0, parts[1])
break
else:
path = parts[0]
allparts.insert(0, parts[1])
return allparts
4.16.3 DiscussionThe os.path.split function splits a path into two parts: everything before the final slash and everything after it. For example: >>> os.path.split('c:\\foo\\bar\\baz.txt')
('c:\\foo\\bar', 'baz.txt')
Often, it's useful to process parts of a path more generically; for example, if you want to walk up a directory. This recipe splits a path into each piece that corresponds to a mount point, directory name, or file. A few test cases make it clear: >>> splitall('a/b/c')
['a', 'b', 'c']
>>> splitall('/a/b/c/')
['/', 'a', 'b', 'c', '']
>>> splitall('/')
['/']
>>> splitall('C:')
['C:']
>>> splitall('C:\\')
['C:\\']
>>> splitall('C:\\a')
['C:\\', 'a']
>>> splitall('C:\\a\\')
['C:\\', 'a', '']
>>> splitall('C:\\a\\b')
['C:\\', 'a', 'b']
>>> splitall('a\\b')
['a', 'b']
4.16.4 See AlsoRecipe 4.17; documentation on the os.path module in the Library Reference. |
| I l@ve RuBoard |
|