Obtenir le chemin du fichier ouvert en Python


113

Si j'ai un fichier ouvert, y a-t-il un osappel pour obtenir le chemin complet sous forme de chaîne?

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

De f, comment pourrais-je obtenir "/Users/Desktop/febROSTER2012.xls"?

Réponses:


145

La clé ici est l' nameattribut de l' fobjet représentant le fichier ouvert. Vous obtenez comme ça:

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

Aide-t-il?


4
Pour les fichiers créés par: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')ne fonctionne pas!
Victor

19
@Victor: Veuillez lire la documentation du tempfilemodule, en particulier pour tempfile.NamedTemporaryFile, juste en dessous de la documentation que tempfile.TemporaryFilevous avez mentionnée. C'est un cas particulier pour le fichier temporaire et, comme vu dans la documentation, il existe déjà une solution. tempfile.TemporaryFilen'est pas destiné à être utilisé au cas où vous voudriez lire le nom.
Tadeck

12
Si vous créez un fichier en utilisant open ('foo.txt', 'w') puis faites f.name, il ne vous fournit que la sortie foo.txt
searchengine27

Zans donne une solution qui fonctionne également pour les chemins relatifs. Voir sa réponse ci-dessous.
Markus le

Il y a tempfile.NamedTemporaryFile au cas où vous auriez besoin du nom.
Apollo Data

96

J'ai eu exactement le même problème. Si vous utilisez un chemin relatif, os.path.dirname (chemin) ne renverra que le chemin relatif. os.path.realpath fait l'affaire:

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

15
C'est en fait la vraie réponse.
BlueTrin

1
Cela ne fonctionne que si le chemin de fichier relatif est toujours le chemin de fichier correct. Si je spécifie le nom de fichier comme «text.txt» depuis le répertoire «~ / Documents /» et que je change de répertoire en «~ /», os.path.realpathje renverrai «~ / text.txt» au lieu de «~ / Documents / text.txt».
K. Nielson

1
J'ai remarqué un problème avec realpath. Il ne corrige pas la casse des caractères alpha des fichiers mais conserve plutôt la casse utilisée dans l'instruction open. J'avais espéré qu'il renverrait le nom du fichier tel qu'il existe réellement sur le système de fichiers. (Ceci est Windows, bien sûr)
RufusVS

12

Et si vous voulez simplement obtenir le nom du répertoire et que vous n'avez pas besoin du nom de fichier qui l'accompagne, vous pouvez le faire de la manière conventionnelle suivante en utilisant osle module Python.

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

De cette façon, vous pouvez obtenir la structure des répertoires.


Cela renvoie une chaîne vide si vous utilisez f = open('febROSTER2012.xls'). Comment pouvez-vous accéder au chemin complet?
NZD

3

Vous pouvez aussi l'obtenir comme ça.

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

2
Ce qui l'ajouterait au répertoire de travail actuel, pas au répertoire où il réside réellement.
Bachsau
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.