python - Find the current directory and file's directory

ID : 261

viewed : 164

Tags : pythondirectorypython

Top 5 Answer for python - Find the current directory and file's directory

vote vote

90

To get the full path to the directory a Python file is contained in, write this in that file:

import os  dir_path = os.path.dirname(os.path.realpath(__file__)) 

(Note that the incantation above won't work if you've already used os.chdir() to change your current working directory, since the value of the __file__ constant is relative to the current working directory and is not changed by an os.chdir() call.)


To get the current working directory use

import os cwd = os.getcwd() 

Documentation references for the modules, constants and functions used above:

vote vote

89

Current working directory: os.getcwd()

And the __file__ attribute can help you find out where the file you are executing is located. This Stack Overflow post explains everything: How do I get the path of the current executed file in Python?

vote vote

74

You may find this useful as a reference:

import os  print("Path at terminal when executing this file") print(os.getcwd() + "\n")  print("This file path, relative to os.getcwd()") print(__file__ + "\n")  print("This file full path (following symlinks)") full_path = os.path.realpath(__file__) print(full_path + "\n")  print("This file directory and name") path, filename = os.path.split(full_path) print(path + ' --> ' + filename + "\n")  print("This file directory only") print(os.path.dirname(full_path)) 
vote vote

69

The pathlib module, introduced in Python 3.4 (PEP 428 — The pathlib module — object-oriented filesystem paths), makes the path-related experience much much better.

pwd  /home/skovorodkin/stack  tree  . └── scripts     ├── 1.py     └── 2.py 

In order to get the current working directory, use Path.cwd():

from pathlib import Path  print(Path.cwd())  # /home/skovorodkin/stack 

To get an absolute path to your script file, use the Path.resolve() method:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py 

And to get the path of a directory where your script is located, access .parent (it is recommended to call .resolve() before .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts 

Remember that __file__ is not reliable in some situations: How do I get the path of the current executed file in Python?.


Please note, that Path.cwd(), Path.resolve() and other Path methods return path objects (PosixPath in my case), not strings. In Python 3.4 and 3.5 that caused some pain, because open built-in function could only work with string or bytes objects, and did not support Path objects, so you had to convert Path objects to strings or use the Path.open() method, but the latter option required you to change old code:

File scripts/2.py

from pathlib import Path  p = Path(__file__).resolve()  with p.open() as f: pass with open(str(p)) as f: pass with open(p) as f: pass  print('OK') 

Output

python3.5 scripts/2.py  Traceback (most recent call last):   File "scripts/2.py", line 11, in <module>     with open(p) as f: TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py') 

As you can see, open(p) does not work with Python 3.5.

PEP 519 — Adding a file system path protocol, implemented in Python 3.6, adds support of PathLike objects to the open function, so now you can pass Path objects to the open function directly:

python3.6 scripts/2.py  OK 
vote vote

54

  1. To get the current directory full path

    >>import os >>print os.getcwd() 

    Output: "C :\Users\admin\myfolder"

  2. To get the current directory folder name alone

    >>import os >>str1=os.getcwd() >>str2=str1.split('\\') >>n=len(str2) >>print str2[n-1] 

    Output: "myfolder"

Top 3 video Explaining python - Find the current directory and file's directory

Related QUESTION?