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"?

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?


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)

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.


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)

2
Womit es an das aktuelle Arbeitsverzeichnis angehängt wird, nicht an das Verzeichnis, in dem es sich tatsächlich befindet.
Bachsau
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.