Angenommen, Python-Code wird in einem früheren Windows-Verzeichnis ausgeführt, das nicht bekannt ist, z. B. 'main', und überall dort, wo Code bei der Ausführung installiert wird, muss auf das Verzeichnis 'main / 2091 / data.txt' zugegriffen werden.
Wie soll ich die Funktion open (location) verwenden? Was soll Standort sein?
Bearbeiten:
Ich fand, dass unten einfacher Code funktioniert. Hat er irgendwelche Nachteile?
file="\2091\sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
python
file
path
relative-path
Kamelie
quelle
quelle
r"\2091\sample.txt"
. Oder entkomme ihnen wie"\\2091\\sample.txt"
(aber das ist nervig). Außerdem verwenden Sie 2) getcwd (), den Pfad, in dem Sie sich beim Ausführen des Skripts befanden. Ich dachte, Sie wollten relativ zum Speicherort des Skripts (aber jetzt wundere ich mich). Und 3) verwenden Sie immeros.path
Funktionen zum Bearbeiten von Pfaden. Ihre Verbindungslinie sollteos.path.join(os.getcwd(), file)
4) die sein; ist sinnloswith open(path, 'r+') as fp:
. Sehen Sie hier für die beste Erklärung vonwith
Aussagen die ich gesehen habe.os.path.abspath
, einfach den vollständigen Pfad des relativen Pfads zu öffnen. Die endgültige Aussage sieht folgendermaßen aus:os.path.abspath('./2091/sample.txt')
Antworten:
Bei dieser Art von Dingen müssen Sie vorsichtig sein, was Ihr tatsächliches Arbeitsverzeichnis ist. Beispielsweise können Sie das Skript möglicherweise nicht in dem Verzeichnis ausführen, in dem sich die Datei befindet. In diesem Fall können Sie nicht einfach einen relativen Pfad selbst verwenden.
Wenn Sie sicher sind, dass sich die gewünschte Datei in einem Unterverzeichnis befindet, unter dem sich das Skript tatsächlich befindet, können
__file__
Sie hier helfen.__file__
ist der vollständige Pfad zu dem Skript, das Sie ausführen.Sie können also mit so etwas herumspielen:
quelle
__file__
ist ein relativer Pfad (zumindest in meinem Setup aus irgendeinem Grund), und Sie müssenos.path.abspath(__file__)
zuerst aufrufen . Osx / Homebrew 2.7NameError: name '__file__' is not defined
Dieser Code funktioniert gut:
quelle
Ich habe ein Konto erstellt, um eine Diskrepanz zu klären, die ich in Russ 'ursprünglicher Antwort gefunden habe.
Als Referenz war seine ursprüngliche Antwort:
Dies ist eine großartige Antwort, da versucht wird, dynamisch einen absoluten Systempfad zur gewünschten Datei zu erstellen.
Cory Mawhorter bemerkte, dass dies
__file__
ein relativer Pfad ist (dies gilt auch für mein System) und schlug vor, ihn zu verwendenos.path.abspath(__file__)
.os.path.abspath
Gibt jedoch den absoluten Pfad Ihres aktuellen Skripts zurück (dh/path/to/dir/foobar.py
)Um diese Methode zu verwenden (und wie ich sie schließlich zum Laufen gebracht habe), müssen Sie den Skriptnamen am Ende des Pfads entfernen:
Der resultierende abs_file_path (in diesem Beispiel) wird zu:
/path/to/dir/2091/data.txt
quelle
os.path.dirname(os.path.abspath(__file__))
os.path.dirname
Funktionalität selbst zu replizieren, wie ich es in meiner Antwort im letzten Jahr getan habe.Dies hängt davon ab, welches Betriebssystem Sie verwenden. Wenn Sie eine Lösung suchen, die sowohl mit Windows als auch mit * nix kompatibel ist, können Sie Folgendes tun:
sollte gut funktionieren.
Das
path
Modul kann einen Pfad für jedes Betriebssystem formatieren, auf dem es ausgeführt wird. Außerdem verarbeitet Python relative Pfade einwandfrei, sofern Sie über die richtigen Berechtigungen verfügen.Bearbeiten :
Wie von kindall in den Kommentaren erwähnt, kann Python ohnehin zwischen Pfaden im Unix- und Windows-Stil konvertieren, sodass noch einfacherer Code funktioniert:
Trotzdem hat das
path
Modul noch einige nützliche Funktionen.quelle
relpath()
konvertiert einen Pfadnamen in einen relativen Pfad. Da es bereits ein relativer Pfad ist, wird es nichts tun.os.path
Modul, die die bessere Wahl wäre?__file__
. Bitte sehen Sie meine Antwort.Ich verbringe viel Zeit damit, herauszufinden, warum mein Code meine Datei mit Python 3 auf dem Windows-System nicht finden konnte. Also habe ich hinzugefügt. vorher / und alles hat gut funktioniert:
quelle
file_path = os.path.join(script_dir, 'output03.txt')
script_dir = os.path.abspath(os.path.dirname(__file__))
Code:
Erläuterung:
Bibliothek importieren:
Verwenden Sie
__file__
diese Option, um den Pfad des aktuellen Skripts zu ermitteln:Trennt den Skriptpfad in mehrere Elemente:
Entfernen Sie das letzte Element in der Liste (die eigentliche Skriptdatei):
Fügen Sie den Pfad der relativen Datei hinzu:
Verbinden Sie die Listenelemente und fügen Sie die Datei des relativen Pfads hinzu:
Jetzt können Sie mit der Datei tun, was Sie wollen, wie zum Beispiel:
quelle
path = "/".join(script_directory) + "/" + rel_path
sollten Sie das OS-Modul wie in verwendenpath = os.path.join(script_directory, rel_path)
. Anstatt den Pfad, den Sie verwenden sollten, manuell zu analysierenscript_path = os.path.dirname(__file__)
Wenn sich die Datei in Ihrem übergeordneten Ordner befindet, z. follower.txt können Sie einfach verwenden
open('../follower.txt', 'r').read()
quelle
Versuche dies:
Mit Python 3.4 wurde eine neue Standardbibliothek für den Umgang mit Dateien und Pfaden namens pathlib eingeführt. Für mich geht das!
quelle
Ich bin mir nicht sicher, ob das überall funktioniert.
Ich benutze Ipython in Ubuntu.
Wenn Sie die Datei im Unterverzeichnis des aktuellen Ordners lesen möchten:
Ihr Skript befindet sich im aktuellen Ordner. Versuchen Sie einfach Folgendes:
quelle
Python übergibt nur den Dateinamen, den Sie ihm geben, an das Betriebssystem, wodurch es geöffnet wird. Wenn Ihr Betriebssystem relative Pfade wie
main/2091/data.txt
(Hinweis: es tut) unterstützt, funktioniert das einwandfrei.Möglicherweise können Sie eine solche Frage am einfachsten beantworten, indem Sie sie ausprobieren und sehen, was passiert.
quelle
getcwd()
. Ich habe die ursprüngliche Beschreibung als "relativ zu dem Ort, an dem ich das Skript ausführe, unabhängig davon, wo sich der Code befindet" gelesen.quelle
Als Anfänger fand ich diese Beschreibungen etwas einschüchternd. Wie zuerst würde ich es versuchen
For Windows
und dies würde eine erhöhen
syntax error
. Ich war oft verwirrt. Dann nach einigem Surfen über Google. gefunden, warum der Fehler aufgetreten ist. Schreiben Sie dies für AnfängerDamit der Pfad in Unicode gelesen werden kann, fügen Sie
\
beim Starten des Dateipfads einfach einen hinzuUnd jetzt funktioniert es einfach hinzufügen,
\
bevor Sie das Verzeichnis starten.quelle
\t
wie zum Beispiel\top\directory
, als ‚\ t‘ wird als Tab-Zeichen interpretiert und Ihr ‚Trick‘ schlägt fehl. Die beste Option ist die Verwendung des rohen Zeichenfolgenformats, beir'C:\Users\chidu\Desktop\Skipper New\Special_Note.txt'
dem nicht versucht wird, Zeichen zu maskieren.