Credit: Trent Mick
We 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
The 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']
Recipe 4.17; documentation on the
os.path
module in the Library Reference.
Get Python Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.