So erhalten Sie einen absoluten Dateipfad in Python
-
09-06-2019 - |
Frage
Angesichts eines Pfades wie "mydir/myfile.txt"
, wie finde ich den absoluten Pfad der Datei relativ zum aktuellen Arbeitsverzeichnis in Python?Z.B.Unter Windows erhalte ich möglicherweise Folgendes:
"C:/example/cwd/mydir/myfile.txt"
Lösung
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
Funktioniert auch, wenn es bereits ein absoluter Pfad ist:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
Andere Tipps
Sie könnten die neue Python 3.4-Bibliothek verwenden pathlib
.(Sie können es auch für Python 2.6 oder 2.7 erhalten mit pip install pathlib
.) Die Autoren schrieb:„Das Ziel dieser Bibliothek besteht darin, eine einfache Hierarchie von Klassen bereitzustellen, um Dateisystempfade und die allgemeinen Operationen, die Benutzer damit ausführen, zu verwalten.“
So erhalten Sie einen absoluten Pfad in Windows:
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
Oder unter UNIX:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
Dokumente finden Sie hier: https://docs.python.org/3/library/pathlib.html
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Besser noch: Installieren Sie das Modul (zu finden auf PyPI
), es umschließt alles os.path
Funktionen und andere verwandte Funktionen in Methoden für ein Objekt, die überall dort verwendet werden können, wo Zeichenfolgen verwendet werden:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Heute können Sie auch das verwenden unipath
Paket, auf dem basiert 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
>>>
Ich würde empfehlen, dieses Paket zu verwenden, da es angeboten wird eine saubere Schnittstelle zu gängigen os.path-Dienstprogrammen.
Update für Python 3.4+ pathlib
das beantwortet tatsächlich die Frage:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
Wenn Sie nur eine temporäre Zeichenfolge benötigen, denken Sie daran, dass Sie diese verwenden können Path
Objekte mit allen relevanten Funktionen in os.path
, natürlich auch abspath
:
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)))
Beachten Sie, dass expanduser
ist erforderlich (unter Unix), falls der angegebene Ausdruck für den Namen und Speicherort der Datei (oder des Verzeichnisses) ein führendes Zeichen enthalten kann ~/
(Die Tilde bezieht sich auf das Home-Verzeichnis des Benutzers) und expandvars
kümmert sich um alle anderen Umgebungsvariablen (wie $HOME
).
Ich bevorzuge die Verwendung von Glob
So listen Sie alle Dateitypen in Ihrem aktuellen Ordner auf:
import glob
for x in glob.glob():
print(x)
Hier erfahren Sie, wie Sie beispielsweise alle TXT-Dateien in Ihrem aktuellen Ordner auflisten:
import glob
for x in glob.glob('*.txt'):
print(x)
Hier erfahren Sie, wie Sie alle Dateitypen in einem ausgewählten Verzeichnis auflisten:
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
Ich hoffe, das hat dir geholfen
Modul os
Bietet eine Möglichkeit, den Bauchmuskelpfad zu finden.
ABER Die meisten Pfade in Linux beginnen mit ~
(Tilde), was kein zufriedenstellendes Ergebnis liefert.
damit Sie es verwenden können srblib
dafür.
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
Installieren Sie es mit python3 -m pip install srblib
wenn Sie einen Mac verwenden
import os
upload_folder = os.path.abspath("static/img/users")
Dadurch erhalten Sie einen vollständigen Pfad:
print(upload_folder)
zeigt den folgenden Pfad an:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
Falls jemand Python und Linux verwendet und nach dem vollständigen Pfad zur Datei sucht:
>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file
Das stets Ruft den richtigen Dateinamen des aktuellen Skripts ab, auch wenn es aus einem anderen Skript aufgerufen wird.Es ist besonders nützlich bei der Verwendung subprocess
.
import sys,os
filename = sys.argv[0]
Von dort aus können Sie den vollständigen Pfad des Skripts abrufen mit:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
Es erleichtert auch die Navigation durch Ordner, indem es einfach angehängt wird /..
so oft, wie Sie in der Verzeichnishierarchie nach oben gelangen möchten.
So erhalten Sie das cwd:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
Für den übergeordneten Pfad:
>>> os.path.abspath(filename+"/../..")
'/foo'
Durch Kombinieren "/.."
Mit anderen Dateinamen können Sie auf jede Datei im System zugreifen.
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)