How do I get the full path of the current file's directory?


How do I get the current file’s directory path?
I tried:

>>> os.path.abspath(__file__)

But I want:

Asked By: Shubham



The special variable __file__ contains the path to the current file. From that we can get the directory using either pathlib or the os.path module.

Python 3

For the directory of the script being run:

import pathlib

For the current working directory:

import pathlib

Python 2 and 3

For the directory of the script being run:

import os

If you mean the current working directory:

import os

Note that before and after file is two underscores, not just one.

Also note that if you are running interactively or have loaded code from something other than a file (eg: a database or online resource), __file__ may not be set since there is no notion of "current file". The above answer assumes the most common scenario of running a python script that is in a file.


  1. pathlib in the python documentation.
  2. os.path – Python 2.7, os.path – Python 3
  3. os.getcwd – Python 2.7, os.getcwd – Python 3
  4. what does the __file__ variable mean/do?
Answered By: Bryan Oakley
import os
Answered By: chefsmart

IPython has a magic command %pwd to get the present working directory. It can be used in following way:

from IPython.terminal.embed import InteractiveShellEmbed

ip_shell = InteractiveShellEmbed()

present_working_directory = ip_shell.magic("%pwd")

On IPython Jupyter Notebook %pwd can be used directly as following:

present_working_directory = %pwd
Answered By: Nafeez Quraishi

Using Path from pathlib is the recommended way since Python 3:

from pathlib import Path
print("File      Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute()) # Directory of current working directory, not __file__  

Note: If using Jupyter Notebook, __file__ doesn’t return expected value, so Path().absolute() has to be used.

Answered By: Ron Kalian

I have made a function to use when running python under IIS in CGI in order to get the current folder:

import os 
def getLocalFolder():
    return path[len(path)-1]
Answered By: Gil Allen

In Python 3.x I do:

from pathlib import Path

path = Path(__file__).parent.absolute()


  • Path(__file__) is the path to the current file.
  • .parent gives you the directory the file is in.
  • .absolute() gives you the full absolute path to it.

Using pathlib is the modern way to work with paths. If you need it as a string later for some reason, just do str(path).

Answered By: Arminius


from pathlib import Path

#Returns the path of the current directory
mypath = Path().absolute()
print('Absolute path : {}'.format(mypath))

#if you want to go to any other file inside the subdirectories of the directory path got from above method
filePath = mypath/'data'/'fuel_econ.csv'
print('File path : {}'.format(filePath))

#To check if file present in that directory or Not
isfileExist = filePath.exists()
print('isfileExist : {}'.format(isfileExist))

#To check if the path is a directory or a File
isadirectory = filePath.is_dir()
print('isadirectory : {}'.format(isadirectory))

#To get the extension of the file
fileExtension = mypath/'data'/'fuel_econ.csv'
print('File extension : {}'.format(filePath.suffix))


Absolute path : D:StudyMachine LearningJupitor NotebookJupytorNotebookTest2Udacity_ScriptsMatplotlib and seaborn Part2

File path : D:StudyMachine LearningJupitor NotebookJupytorNotebookTest2Udacity_ScriptsMatplotlib and seaborn Part2datafuel_econ.csv

isfileExist : True

isadirectory : False

File extension : .csv

Answered By: Arpan Saini

Try this:

import os
dir_path = os.path.dirname(os.path.realpath(__file__))
Answered By: Akshaya Natarajan

I found the following commands return the full path of the parent directory of a Python 3 script.

Python 3 Script:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from pathlib import Path

#Get the absolute path of a Python3.6 and above script.
dir1 = Path().resolve()  #Make the path absolute, resolving any symlinks.
dir2 = Path().absolute() #See @RonKalian answer 
dir3 = Path(__file__).parent.absolute() #See @Arminius answer
dir4 = Path(__file__).parent 



  1. dir1 and dir2 works only when running a script located in the current working directory, but will break in any other case.
  2. Given that Path(__file__).is_absolute() is True, the use of the .absolute() method in dir3 appears redundant.
  3. The shortest command that works is dir4.

Explanation links: .resolve(), .absolute(), Path(file).parent().absolute()

Answered By: Sun Bear

Python 2 and 3

You can simply also do:

from os import sep
print(__file__.rsplit(sep, 1)[0] + sep)

Which outputs something like:

Answered By: Giorgos Xou

This can be done without a module.

def get_path():
    return (__file__.replace(f"<your script name>.py", ""))
Answered By: Charlie

works also if __file__ is not available (jupyter notebooks)

import sys
from pathlib import Path
path_file = Path(sys.path[0])

Also uses pathlib, which is the object oriented way of handling paths in python 3.

Answered By: Markus Dutschke
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.