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 pathlib
kunnen 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+ pathlib
die 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 expanduser
nodig 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 expandvars
zorgt voor alle andere omgevingsvariabelen (zoals $HOME
).
Antwoord 6
Vandaag kunt u ook het pakket unipath
gebruiken 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