How to get an absolute file path in Python

前端 未结 9 1238
孤城傲影
孤城傲影 2020-11-22 11:53

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

相关标签:
9条回答
  • 2020-11-22 12:17

    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
    
    0 讨论(0)
  • 2020-11-22 12:19

    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
    
    0 讨论(0)
  • 2020-11-22 12:22

    This always gets the right filename of the current script, even when it is called from within another script. It is especially useful when using subprocess.

    import sys,os
    
    filename = sys.argv[0]
    

    from there, you can get the script's full path with:

    >>> os.path.abspath(filename)
    '/foo/bar/script.py'
    

    It also makes easier to navigate folders by just appending /.. as many times as you want to go 'up' in the directories' hierarchy.

    To get the cwd:

    >>> os.path.abspath(filename+"/..")
    '/foo/bar'
    

    For the parent path:

    >>> os.path.abspath(filename+"/../..")
    '/foo'
    

    By combining "/.." with other filenames, you can access any file in the system.

    0 讨论(0)
  • 2020-11-22 12:24
    import os
    os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
    

    Note that 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 $HOME).

    0 讨论(0)
  • 2020-11-22 12:26

    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

    0 讨论(0)
  • 2020-11-22 12:27
    >>> 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'
    
    0 讨论(0)
提交回复
热议问题