"mydir/myfile.txt"
Wie finde ich unter Berücksichtigung eines Pfads wie den absoluten Pfad der Datei relativ zum aktuellen Arbeitsverzeichnis in Python? ZB unter Windows könnte ich am Ende Folgendes haben:
"C:/example/cwd/mydir/myfile.txt"
"mydir/myfile.txt"
Wie finde ich unter Berücksichtigung eines Pfads wie den absoluten Pfad der Datei relativ zum aktuellen Arbeitsverzeichnis in Python? ZB unter Windows könnte ich am Ende Folgendes haben:
"C:/example/cwd/mydir/myfile.txt"
Antworten:
Funktioniert auch, wenn es sich bereits um einen absoluten Pfad handelt:
quelle
normpath()
wie folgt :normpath(join(os.getcwd(), path))
. Wenn Siemydir/myfile.txt
dies nicht tunos.getcwd()
, ist der absolute Pfad nicht der reale Pfad .mydir/myfile.txt
implizit auf einen Pfad innerhalb des aktuellen Arbeitsverzeichnisses verwiesen, der daher äquivalent zu ist./mydir/myfile.txt
. Das ist vielleicht nicht der Pfad, den Sie eingeben wollten, aber es scheint die richtige Interpretation des Pfades zu sein, soweit ich das beurteilen kann. Könnten Sie näher darauf eingehen?abspath
Funktion und einer realen Datei besteht. Sie können einen beliebigen Pfadnamen angeben - nicht vorhandene Dateien und Verzeichnishierarchien sind in Ordnung - und abspath löst einfach die Bits des Pfads (einschließlich des übergeordneten Verzeichnisses "..
" auf) und gibt eine Zeichenfolge zurück. Dies ist nur eine Zeichenfolge, die aus dem aktuellen Verzeichnis berechnet wurde. Jede Korrelation zu einer tatsächlichen Datei scheint zufällig zu sein. Versuchen Sie esos.path.abspath("/wow/junk/../blha/hooey")
. Es klappt.os.path.exists
. Im Gegenteil, Systeme wie PowerShell, die auf dem Pfad bestehen, der mit der Standardfunktion zur Pfadauflösung vorhanden ist, sind schwierig zu verwenden.relpath
: "Auf das Dateisystem wird nicht zugegriffen, um die Existenz oder Art von zu bestätigenpath
." Wenn das Argument hier offensichtlich ist, warum explizit dafürrelpath
?Sie können die neue Python 3.4-Bibliothek verwenden
pathlib
. (Sie können es auch für Python 2.6 oder 2.7 verwendenpip install pathlib
.) Die Autoren schrieben : "Das Ziel dieser Bibliothek ist es, eine einfache Hierarchie von Klassen bereitzustellen, um Dateisystempfade und die allgemeinen Operationen, die Benutzer über sie ausführen, zu behandeln."So erhalten Sie einen absoluten Pfad in Windows:
Oder unter UNIX:
Dokumente finden Sie hier: https://docs.python.org/3/library/pathlib.html
quelle
os.path.abspath()
gab mir einen Fehler: DieAttributeError: 'NoneType' object has no attribute 'startswith'
VerwendungPath().resolve()
funktioniert nicht mit demselben relativen Dateipfad. (Linux und Python3.4)Besser noch, installieren Sie das Modul (gefunden auf
PyPI
), es umschließt alleos.path
Funktionen und andere verwandte Funktionen in Methoden für ein Objekt, die überall dort verwendet werden können, wo Zeichenfolgen verwendet werden:quelle
pathlib
. Siehe meine Antwort in diesem Thread.from path import Path
dann seinPath('mydir/myfile.txt').abspath()
path
Modul verwendet. Das verknüpfte Modul verwendet eine Klasse mit dem Namenpath
.Heute können Sie auch das
unipath
Paket verwenden, das auf Folgendem basiertpath.py
: http://sluggo.scrapping.cc/python/unipath/Ich würde empfehlen, dieses Paket zu verwenden, da es eine saubere Schnittstelle zu gängigen Dienstprogrammen von os.path bietet .
quelle
Update für Python 3.4+
pathlib
, das die Frage tatsächlich beantwortet:Wenn Sie nur eine temporäre Zeichenfolge benötigen, denken Sie daran, dass Sie
Path
Objekte mit allen relevanten Funktionen verwenden könnenos.path
, einschließlichabspath
:quelle
Beachten Sie, dass
expanduser
dies (unter Unix) erforderlich ist, falls der angegebene Ausdruck für den Namen und den Speicherort der Datei (oder des Verzeichnisses) einen führenden enthält~/
(die Tilde bezieht sich auf das Ausgangsverzeichnis des Benutzers) undexpandvars
sich um alle anderen Umgebungsvariablen (wie z$HOME
. B. ) kümmert .quelle
Dadurch wird immer der richtige Dateiname des aktuellen Skripts angezeigt, auch wenn es aus einem anderen Skript heraus aufgerufen wird. Es ist besonders nützlich bei der Verwendung
subprocess
.Von dort aus können Sie den vollständigen Pfad des Skripts abrufen mit:
Es erleichtert auch das Navigieren in Ordnern, indem Sie so
/..
oft anhängen, wie Sie in der Verzeichnishierarchie nach oben möchten.So erhalten Sie die cwd:
Für den übergeordneten Pfad:
Durch die Kombination
"/.."
mit anderen Dateinamen können Sie auf jede Datei im System zugreifen.quelle
Das Modul
os
bietet eine Möglichkeit, den Abs-Pfad zu finden.ABER die meisten Pfade in Linux beginnen mit
~
(Tilde), was kein zufriedenstellendes Ergebnis liefert.so können Sie dafür verwenden
srblib
.Installieren Sie es mit
python3 -m pip install srblib
https://pypi.org/project/srblib/
quelle
Ich bevorzuge Glob
So listen Sie alle Dateitypen in Ihrem aktuellen Ordner auf:
So listen Sie alle (zum Beispiel) TXT-Dateien in Ihrem aktuellen Ordner auf:
So listen Sie alle Dateitypen in einem ausgewählten Verzeichnis auf:
hoffe das hat dir geholfen
quelle
os.path.abspath()
) auf jeden relativen Pfad anwenden, derglob
für Ihre ersten beiden Fälle vorgesehen ist ...wenn Sie auf einem Mac sind
Dies gibt Ihnen einen vollständigen Weg:
zeigt den folgenden Pfad:
quelle
Falls jemand Python und Linux verwendet und nach dem vollständigen Pfad zur Datei sucht:
quelle