How to get an absolute file path in Python

2019-01-01 01:22发布

问题:

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:

\"C:/example/cwd/mydir/myfile.txt\"

回答1:

>>> 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\'


回答2:

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



回答3:

>>> import os
>>> os.path.abspath(\'mydir/myfile.txt\')
\'C:\\\\example\\\\cwd\\\\mydir\\\\myfile.txt\'
>>> 


回答4:

Better still, install the path.py module, 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\'
>>>


回答5:

Today you can also use the unipath package which was based on path.py: http://sluggo.scrapping.cc/python/unipath/

>>> 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.



回答6:

I prefer to use glob

here is how to list all file types in your current folder:

import glob
for x in glob.glob():
    print(x)

here is how to list all (for example) .txt files in your current folder:

import glob
for x in glob.glob(\'*.txt\'):
    print(x)

here is how to list all file types in a chose directory:

import glob
for x in glob.glob(\'C:/example/hi/hello/\'):
    print(x)

hope this helped you



回答7:

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

If you only need a temporary string, keep in mind that you can use Path objects with all the relevant functions in os.path, including of course abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object


回答8:

if you are on a mac

import os
upload_folder = os.path.abspath(\"static/img/users\")

this will give you a full path:

print(upload_folder)

will show the following path:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user


回答9:

In case someone is using python and linux and looking for full path to file:

>>> path=os.popen(\"readlink -f file\").read()
>>> print path
abs/path/to/file


回答10:

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + \"\\\\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)