Hoe krijg ik een absoluut bestandspad in Python

Gegeven een pad zoals "mydir/myfile.txt", hoe vind ik het absolute pad van het bestand ten opzichte van de huidige werkmap in Python? bijv. op Windows kan ik eindigen met:

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

Antwoord 1, autoriteit 100%

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

Werkt ook als het al een absoluut pad is:

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

Antwoord 2, autoriteit 8%

Je zou de nieuwe Python 3.4 bibliotheek pathlibkunnen gebruiken. (Je kunt het ook krijgen voor Python 2.6 of 2.7 met behulp van pip install pathlib.) De auteurs schreef: “Het doel van deze bibliotheek is om een eenvoudige hiërarchie van klassen te bieden voor het afhandelen van bestandssysteempaden en de algemene bewerkingen die gebruikers erover doen.”

Om een absoluut pad in Windows te krijgen:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

Of op UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Documenten vindt u hier: https://docs.python.org/3/library/pathlib.html


Antwoord 3, autoriteit 2%

Installeer een padmodulevan derden (te vinden op PyPI), verpakt het alle os.path-functies en andere gerelateerde functies in methoden op een object dat overal kan worden gebruikt waar strings worden gebruikt:

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

Antwoord 4

Update voor Python 3.4+ pathlibdie beantwoordt eigenlijk de vraag:

from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Als je alleen een tijdelijke string nodig hebt, houd er dan rekening mee dat je Path-objecten kunt gebruiken met alle relevante functies in os.path, inclusief natuurlijk abspath:

from os.path import abspath
absolute = abspath(relative)  # absolute is a str object

Antwoord 5

import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Merk op dat expandusernodig is (op Unix) in het geval dat de gegeven uitdrukking voor de naam en locatie van het bestand (of directory) een leidende ~/(de tilde verwijst naar de homedirectory van de gebruiker), en expandvarszorgt voor alle andere omgevingsvariabelen (zoals $HOME).


Antwoord 6

Vandaag kunt u ook het pakket unipathgebruiken dat was gebaseerd op 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
>>>

Ik zou aanraden dit pakket te gebruiken omdat het een schone interface biedt os.path hulpprogramma’s.


Antwoord 7

Dit altijdkrijgt de juiste bestandsnaam van het huidige script, zelfs als het vanuit een ander script wordt aangeroepen. Het is vooral handig bij het gebruik van subprocess.

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

van daaruit kun je het volledige pad van het script krijgen met:

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

Het maakt het ook gemakkelijker om door mappen te navigeren door /..zo vaak als je wilt ‘omhoog’ in de hiërarchie van mappen toe te voegen.

Om de cwd te krijgen:

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

Voor het bovenliggende pad:

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

Door "/.."te combineren met andere bestandsnamen, hebt u toegang tot elk bestand in het systeem.


Antwoord 8

als je een mac gebruikt

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

dit geeft je een volledig pad:

print(upload_folder)

geeft het volgende pad weer:

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

Antwoord 9

In het geval dat iemand python en linux gebruikt en op zoek is naar het volledige pad naar het bestand:

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

Other episodes