2016-12-10 2 views
1

Est-il possible de trouver le chemin et le nom de fichier d'un objet shelve déjà ouvert? J'ai parcouru la documentation pour le shelve mais j'ai l'impression qu'il s'agit plutôt d'un wrapper autour de l'implémentation backend et je suppose que tous les backends implémentent des requêtes sur le fichier avec lequel ils travaillent.Obtenir le chemin du fichier de shelve déjà ouvert?

Répondre

1

Vous pouvez obtenir le nom de fichier, mais il est sans papier et peut se briser à une mise à jour de python:

>>> d=shelve.open("/some/datafile.shelve") 
>>> d.dict._datfile 
'/some/datafile.shelve.dat' 

Pourquoi avez-vous besoin du tout? Vous avez fourni le nom du fichier lors de l'ouverture du shelve. Ne pouvez-vous pas vous référer à ce nom de fichier original? Si vous voulez vraiment, vous pouvez simplement stocker le nom de fichier sur l'objet shelve résultant. De cette façon, vous pouvez consulter par le nom que vous avez donné vous-même, et ne pas dépendre des entrailles de la mise en œuvre:

>>> filename = "/some/datafile.shelve" 
>>> d=shelve.open(filename) 
>>> d.original_filename = filename 
>>> d 
<shelve.DbfilenameShelf object at 0x035A6550> 
>>> d.original_filename 
'/some/datafile.shelve' 
>>> 

Il ne sait pas automatiquement le suffixe « .dat » qui est ajouté cependant.

+0

Merci, cela résout ma question, je me demandais en fait cela hypothétiquement et ne pas avoir un cas d'utilisation immédiate pour cette info, mais je suis sûr que cela pourrait être utile à un moment donné. Curieux comment vous avez compris/connu cette information sur l'attribut ._datfile? –

+0

Je viens d'explorer les propriétés en les imprimant sur l'invite python ... '' print (dir (d)) '' et est passé de là à '' print (dir (d.dict)) '' ... –