Timothy Wong
Timothy Wong

Reputation: 709

How to get the filesystem's root directory in Python?

Situation: I need to find the top level [root] directory of any operating system using the most Pythonic way possible, without system calls.

Problem: While I can check for the operating system using things like if "Windows" in platform.system(), I cannot be too sure if the drive letter is always C:\ or / (the latter being unlikely). I also cannot possibly be sure that there are only Windows and *NIXes that needs to be catalog.

Question: Is there a way to get the top level directory of any operating system? Preferably using the os module since I am already using it.

Upvotes: 8

Views: 17815

Answers (3)

Vijay
Vijay

Reputation: 19

You can use the following to get to the root directory.

file_path = os.path.abspath(__file__)
BASE_DIR = os.path.dirname(file_path)
while (os.path.isdir(BASE_DIR)):
    if (BASE_DIR==os.path.dirname(BASE_DIR)):
        break
    else:
        BASE_DIR=os.path.dirname(BASE_DIR)
        
print(f"{BASE_DIR} is the root directory")

First, BASE_DIR is obtained as the current working directory. Then, a while loop is used to go to the parent directory till it reaches the root directory. When BASE_DIR is the root directory, again using os.path.dirname on the root directory gives the root directory itself. So, using that as a check, we can get the root directory.

Upvotes: 1

cco
cco

Reputation: 6291

Windows doesn't have a single filesystem root. The best you can do portably is to get the root of the filesystem's current directory (assuming the current directory is called '.').

The expression to get that value is:

os.path.abspath('.').split(os.path.sep)[0]+os.path.sep

On Windows, if the current directory is anywhere under C:, that line will return 'C:\', while unix-like systems will return '/'.

I have no idea what VMS would give you.

Upvotes: 4

DYZ
DYZ

Reputation: 57085

I believe os.path.abspath(os.sep) is close to what you are asking for.

Upvotes: 13

Related Questions