How to get an absolute file path in Python
Given a path such as
"mydir/myfile.txt", how do I find the file's absolute path relative to the current working directory in Python? E.g. on Windows, I might end up with:
>>> import os >>> os.path.abspath("mydir/myfile.txt") 'C:/example/cwd/mydir/myfile.txt'
Also works if it is already an absolute path:
>>> import os >>> os.path.abspath("C:/example/cwd/mydir/myfile.txt") 'C:/example/cwd/mydir/myfile.txt'
Read more… Read less…
You could use the new Python 3.4 library
pathlib. (You can also get it for Python 2.6 or 2.7 using
pip install pathlib.) The authors wrote: "The aim of this library is to provide a simple hierarchy of classes to handle filesystem paths and the common operations users do over them."
To get an absolute path in Windows:
>>> from pathlib import Path >>> p = Path("pythonw.exe").resolve() >>> p WindowsPath('C:/Python27/pythonw.exe') >>> str(p) 'C:\\Python27\\pythonw.exe'
Or on UNIX:
>>> from pathlib import Path >>> p = Path("python3.4").resolve() >>> p PosixPath('/opt/python3/bin/python3.4') >>> str(p) '/opt/python3/bin/python3.4'
Docs are here: https://docs.python.org/3/library/pathlib.html
Better still, install the module (found on
PyPI), it wraps all the
os.path functions and other related functions into methods on an object that can be used wherever strings are used:
>>> from path import path >>> path('mydir/myfile.txt').abspath() 'C:\\example\\cwd\\mydir\\myfile.txt' >>>
Today you can also use the
unipath package which was based on
>>> from unipath import Path >>> absolute_path = Path('mydir/myfile.txt').absolute() Path('C:\\example\\cwd\\mydir\\myfile.txt') >>> str(absolute_path) C:\\example\\cwd\\mydir\\myfile.txt >>>
I would recommend using this package as it offers a clean interface to common os.path utilities.
Update for Python 3.4+
pathlib that actually answers the question:
from pathlib import Path relative = Path("mydir/myfile.txt") absolute = relative.absolute() # absolute is a Path object
from os.path import abspath absolute = abspath(relative) # absolute is a str object
import os os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
expanduser is necessary (on Unix) in case the given expression for the file (or directory) name and location may contain a leading
~/(the tilde refers to the user's home directory), and
expandvars takes care of any other environment variables (like