Wie kann man einen absoluten Pfad einer Datei in Python
Gegeben ein Pfad wie "mydir/myfile.txt"
, wie finde ich die Datei den absoluten Pfad relativ zum aktuellen Arbeitsverzeichnis, in Python? E. g. auf Windows, ich könnte am Ende mit:
"C:/example/cwd/mydir/myfile.txt"
Ähnliche Frage: stackoverflow.com/questions/7165749/...
InformationsquelleAutor izb | 2008-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert auch, wenn es bereits einen absoluten Pfad:
normpath()
wie folgt:normpath(join(os.getcwd(), path))
. Also, wennmydir/myfile.txt
nicht unteros.getcwd()
der absolute Pfad ist nicht mit dem realen Pfad.Ohne eine explizite Wurzel
mydir/myfile.txt
implizit bezieht sich auf einen Pfad wird das aktuelle Arbeitsverzeichnis als ist daher äquivalent zu./mydir/myfile.txt
. Das wäre nicht der Weg, den Sie sollen-Eingang, aber es scheint, wie die korrekte interpretation der Pfad, so weit ich erzählen kann. Könnten Sie das näher erläutern?Ich weiß nicht genau Folgen coanor, aber ich würde sagen, dass (im Gegensatz zu dem, was ich vermutet), gibt es keine Verknüpfung zwischen dem argument der
abspath
- Funktion und eine echte Datei. Sie können beliebige Pfadnamen - nicht existierende Dateien und Verzeichnisse, die heirarchies sind in Ordnung - und abspath wird einfach beheben, die bits der Pfad (einschließlich des übergeordneten Verzeichnisses "..
" - element) und einen string zurückgeben. Dies ist nur ein string berechnet aus dem aktuellen Verzeichnis; keine Korrelation zu einer tatsächlichen Datei ist zufällig, so scheint es. Versuchenos.path.abspath("/wow/junk/../blha/hooey")
. Es funktioniert.Ich bin ehrlich gesagt nicht sicher, warum das unerwartete Verhalten. Es ist absolute Pfad, nicht um eine absolute Datei-oder Verzeichnis. Wenn Sie möchten, eine Existenz zu überprüfen, rufen Sie
os.path.exists
. Im Gegenteil, Systeme wie PowerShell, die darauf bestehen, auf dem Pfad vorhandene mit dem standard-Pfad Auflösung Funktion sind ein Schmerz zu verwenden.Davon ausgehen, dass ein Pfad ist nur ein string, der sieht aus wie ein Pfadname überhaupt nicht klar, und geht den Tresen zu, wie ich nachgedacht habe und spricht von Pfadnamen für viele Jahre. Ich zitiere hier den Python-3-Dokumentation für abspath: "Rückkehr einer normalisierten absolutized version des namens Pfad." Nicht ein"...version der Zeichenfolge Pfad". Ein Pfadname, als die Posix definiert, ist "Eine Zeichenfolge, die verwendet wird, um eine Datei zu identifizieren." Die Python docs sind explizit über
relpath
: "das Dateisystem nicht zugegriffen wird, die Bestätigung der Existenz oder der Naturpath
". Wenn das argument hier ist offensichtlich, warum explizit fürrelpath
?InformationsquelleAutor sherbang
Können Sie mit der neuen Python 3.4 Bibliothek
pathlib
. (Sie können auch für Python 2.6 oder 2.7 mitpip install pathlib
.) Die Autoren schrieb: "Das Ziel dieser Bibliothek ist es, eine einfache Hierarchie von Klassen zu behandeln Dateisystem-Pfade und die gemeinsamen Operationen der Benutzer nicht über Sie."Bekommen Sie einen absoluten Pfad in Windows:
Oder unter UNIX:
Docs sind hier: https://docs.python.org/3/library/pathlib.html
os.path.abspath()
gab mir eine Fehlermeldung:AttributeError: 'NoneType' object has no attribute 'startswith'
mitPath().resolve()
nicht mit der gleichen relativen Dateipfad. (Linux und Python ist3.4)InformationsquelleAutor twasbrillig
InformationsquelleAutor Will Harris
Besser noch, installieren Sie die
path.py
Modul, es umschließt alleos.path
- Funktionen und Verwandte Funktionen in Methoden auf ein Objekt, das verwendet werden kann, wo immer strings verwendet werden:Marek: es ist ein Wunder und langjährige Unterlassung.
Sie haben jetzt für Python 3.4:
pathlib
. Siehe meine Antwort in diesem thread.Es gibt yypos in dieser Antwort. Es sollte
from path import Path
dannPath('mydir/myfile.txt').abspath()
Es sind keine Tippfehler, Sie wurden möglicherweise mit einem anderen
path
Modul. Das verlinkte Modul verwendet eine Klasse namenspath
.InformationsquelleAutor Tom
Heute können Sie auch die
unipath
Paket basiert aufpath.py
: http://sluggo.scrapping.cc/python/unipath/Ich würde empfehlen, mit diesem Paket, denn es bietet eine saubere Schnittstelle zu gängigen os.Pfad utilities.
InformationsquelleAutor Rudolf Olah
Update für Python 3.4+
pathlib
, die tatsächlich Antworten auf die Frage:Wenn Sie nur eine temporäre Zeichenfolge, halten Sie im Verstand, die Sie verwenden können
Path
Objekte mit allen relevanten Funktionen imos.path
, darunter natürlich auchabspath
:InformationsquelleAutor Mad Physicist
Beachten Sie, dass
expanduser
notwendig ist (unter Unix) bei der gegebenen Ausdruck für die Datei (oder Verzeichnis) name und Ort enthalten kann, einer der führenden~/
(die tilde verweist auf das Heimatverzeichnis des Benutzers), und dieexpandvars
kümmert sich um alle anderen Umgebungsvariablen (wie$HOME
).InformationsquelleAutor benjimin
Bevorzuge ich glob
hier ist, wie, um eine Liste aller Dateitypen, die sich in Ihrem aktuellen Ordner:
hier ist, wie (zum Beispiel) .txt-Dateien im aktuellen Ordner:
hier ist, wie, um eine Liste aller Datei-Typen in einer wählte Verzeichnis:
hoffe das hat dir geholfen
os.path.abspath()
) auf welchem relativen Pfadglob
bietet für Ihre ersten beiden Fälle ...InformationsquelleAutor F. Taylor
Modul
os
bietet einen Weg zu finden, abs Pfad.ABER die meisten der Pfade in Linux-start mit
~
(tilde), die nicht geben ein zufriedenstellendes Ergebnis.so können Sie
srblib
.installieren Sie es mit
python3 -m pip install srblib
https://pypi.org/project/srblib/
InformationsquelleAutor srbcheema1
wenn Sie auf einem mac
dadurch erhalten Sie einen vollständigen Pfad:
zeigen die folgenden Pfad:
InformationsquelleAutor chikwapuro
Falls jemand mit python und linux und auf der Suche nach vollständiger Pfad zur Datei:
InformationsquelleAutor BND
Diese immer wird der richtige Dateiname des aktuellen Skripts, auch wenn es heißt in ein anderes Skript. Es ist besonders nützlich, wenn
subprocess
.von dort können Sie sich das Skript den vollständigen Pfad mit:
Macht es auch einfacher zu navigieren Ordner einfach durch Anhängen
/..
so oft wie Sie wollen zu gehen 'bis' in den Verzeichnissen' Hierarchie.Um die cwd:
Für den übergeordneten Pfad:
Durch die Kombination
"/.."
mit anderen Dateinamen, können Sie den Zugriff auf jede Datei im system.InformationsquelleAutor Lucas Azevedo
filePath = os.path...
derM ja du hast Recht, ich war auf der Suche auf etwas anderes als ich geschrieben. Ich habe entfernt, was für die Fragestellung irrelevant auf dieser Seite.
InformationsquelleAutor frank__aguirre