Ottieni il percorso dal file aperto in Python


113

Se ho un file aperto, c'è una oschiamata per ottenere il percorso completo come stringa?

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

Da f, come potrei ottenere "/Users/Desktop/febROSTER2012.xls"?

Risposte:


145

La chiave qui è l' nameattributo fdell'oggetto che rappresenta il file aperto. Lo ottieni così:

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

Aiuta?


4
Per i file creati da: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')non funziona!
Victor

19
@ Victor: per favore leggi la documentazione del tempfilemodulo, specialmente per tempfile.NamedTemporaryFile, appena sotto la documentazione per tempfile.TemporaryFilete menzionata. Questo è un caso specifico per i file temporanei e, come si vede nei documenti, esiste già una soluzione. tempfile.TemporaryFilenon è pensato per essere utilizzato nel caso in cui si desideri leggere il nome.
Tadeck

12
Se si crea un file utilizzando aperta ( 'pippo.txt', 'w') e poi fai f.name, vi fornisce soltanto con l'uscita foo.txt
searchengine27

Zans fornisce una soluzione che funziona anche per i percorsi relativi. Vedi la sua risposta di seguito.
Markus

C'è tempfile.NamedTemporaryFile nel caso in cui sia necessario il nome.
Apollo Data

96

Ho avuto lo stesso identico problema. Se stai usando un percorso relativo, os.path.dirname (percorso) restituirà solo il percorso relativo. os.path.realpath fa il trucco:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
Questa è in realtà la vera risposta.
BlueTrin

1
Funziona solo se il percorso del file relativo è ancora il percorso del file corretto. Se specifico il nome del file come "text.txt" dalla directory "~ / Documents /" e poi cambio directory in "~ /", os.path.realpathrestituirà "~ / text.txt" invece di "~ / Documents / text.txt".
K. Nielson,

1
Ho notato un problema con realpath. Non corregge il caso dei caratteri alfa dei file, ma piuttosto mantiene il caso utilizzato nell'istruzione open. Avevo sperato che restituisse il nome del file così come esiste effettivamente nel file system. (Questo è Windows, ovviamente)
RufusVS

12

E se vuoi solo ottenere il nome della directory e non è necessario il nome del file che lo accompagna, puoi farlo nel seguente modo convenzionale usando il osmodulo Python.

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

In questo modo puoi ottenere la struttura delle directory.


Questo restituisce una stringa vuota se usi f = open('febROSTER2012.xls'). Come puoi arrivare al percorso completo?
NZD

3

Puoi ottenerlo anche in questo modo.

filepath = os.path.abspath(f.name)

2
Il che lo aggiungerebbe alla directory di lavoro corrente, non alla directory in cui risiede effettivamente.
Bachsau
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.