DenaliHardtail
DenaliHardtail

Reputation: 28296

How do I get a file's parent directory?

Given a path to a file, c:\xxx\abc\xyz\fileName.jpg, how can I get the file's parent folder? In this example, I'm looking for xyz. The number of directories to get to the file may vary.

Upvotes: 16

Views: 15656

Answers (4)

99Sono
99Sono

Reputation: 3677

I use the following apprach.

(a) Split the full path to the file by the os spearator.

(b) Take the resulting array and return the elments with indexes ranging from [0: lastIndex-1] - In short, remove the last element from the array that results from the split

(c) SImply join together the array that is one elment short using the os separator once again. Should work for windows and linux.

Here is a class function exemplifying.

# @param
#   absolutePathToFile an absolute path pointing to a file or directory
# @return
#       The path to the parent element of the path (e.g. if the absolutePathToFile represents a file, the result is its parent directory)
# if the path represent a directory, the result is its parent directory
def getParentDirectoryFromFile(self, absolutePathToFile):
    splitResutsFromZeroToNMinus1 = absolutePathToFile.split(os.sep)[:-1]
    return  os.sep.join(splitResutsFromZeroToNMinus1) 
pass

Upvotes: 0

Padraic Cunningham
Padraic Cunningham

Reputation: 180391

Using python >= 3.4 pathlib is part of the standard library, you can get the parent name with .parent.name:

from pathlib import Path
print(Path(path).parent.name)

To get all the names use .parents:

print([p.name for p in Path(path).parents])

It can be installed for python2 with pip install pathlib

Upvotes: 8

poke
poke

Reputation: 387557

Use os.path.dirname to get the directory path. If you only want the name of the directory, you can use os.path.basename to extract the base name from it:

>>> path = r'c:\xxx\abc\xyz\fileName.jpg'
>>> import os
>>> os.path.dirname(path)
'c:\\xxx\\abc\\xyz'
>>> os.path.basename(os.path.dirname(path))
'xyz'

Upvotes: 21

adrianus
adrianus

Reputation: 3199

If all your paths look the same like the one you provided:

print path.split('\\')[-2]

Upvotes: -2

Related Questions