Pfad aus geöffneter Datei in Python abrufen

113

Wenn ich eine geöffnete Datei habe, gibt es einen osAufruf, um den vollständigen Pfad als Zeichenfolge abzurufen?

f = open('/Users/Desktop/febROSTER2012.xls')

Von f, wie würde ich bekommen "/Users/Desktop/febROSTER2012.xls"?

David542
quelle

Antworten:

145

Der Schlüssel hier ist das nameAttribut des fObjekts, das die geöffnete Datei darstellt. Sie bekommen es so:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

Hilft es?

Tadeck
quelle
4
Für Dateien erstellt von: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')funktioniert nicht!
Victor
19
@ Victor: Bitte lesen Sie die Dokumentation des tempfileModuls, insbesondere für tempfile.NamedTemporaryFile, direkt unter der Dokumentation, die tempfile.TemporaryFileSie erwähnt haben. Dies ist ein spezieller Fall für temporäre Dateien, und wie in den Dokumenten zu sehen ist, gibt es bereits eine Lösung. tempfile.TemporaryFileist nicht für den Fall gedacht, dass Sie den Namen lesen möchten.
Tadeck
12
Wenn Sie eine Datei mit open ('foo.txt', 'w') erstellen und dann f.name ausführen, erhalten Sie nur die Ausgabe foo.txt
searchengine27
Zans bietet eine Lösung, die auch für relative Pfade funktioniert. Siehe seine Antwort unten.
Markus
Es gibt tempfile.NamedTemporaryFile, falls Sie den Namen benötigen.
Apollo Data
96

Ich hatte genau das gleiche Problem. Wenn Sie einen relativen Pfad verwenden, gibt os.path.dirname (Pfad) nur den relativen Pfad zurück. os.path.realpath macht den Trick:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)
Zans
quelle
15
Dies ist eigentlich die wahre Antwort.
BlueTrin
1
Dies funktioniert nur, wenn der relative Dateipfad immer noch der richtige Dateipfad ist. Wenn ich den Dateinamen als 'text.txt' aus dem Verzeichnis '~ / Documents /' angebe und dann die Verzeichnisse in '~ /' os.path.realpathändere , wird '~ / text.txt' anstelle von '~ / Documents / text.txt' zurückgegeben.
K. Nielson
1
Ich habe ein Problem mit realpath festgestellt. Es korrigiert nicht die Groß- und Kleinschreibung der Dateien, sondern behält die in der open-Anweisung verwendete Groß- und Kleinschreibung bei. Ich hatte gehofft, dass es den Dateinamen zurückgeben würde, wie er tatsächlich im Dateisystem vorhanden ist. (Dies ist natürlich Windows)
RufusVS
12

Und wenn Sie nur den Verzeichnisnamen abrufen möchten und den dazugehörigen Dateinamen nicht benötigen, können Sie dies mit dem osPython-Modul auf die folgende herkömmliche Weise tun .

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

Auf diese Weise können Sie die Verzeichnisstruktur abrufen.

Ali Raza Bhayani
quelle
Dies gibt eine leere Zeichenfolge zurück, wenn Sie verwenden f = open('febROSTER2012.xls'). Wie können Sie den vollen Weg erreichen?
NZD
3

Sie können es auch so bekommen.

filepath = os.path.abspath(f.name)
answerSeeker
quelle
2
Womit es an das aktuelle Arbeitsverzeichnis angehängt wird, nicht an das Verzeichnis, in dem es sich tatsächlich befindet.
Bachsau