2016-12-10 9 views
1

Есть ли способ найти путь и имя файла уже открытого объекта полки?получить путь к файлу уже открытой полки?

Я просмотрел документацию для полки, но у меня создалось впечатление, что это скорее оболочка вокруг реализации бэкэнд, и я полагаю, что не все бэкэнды реализуются, когда-то спрашивают о том, с каким файлом они работают.

ответ

1

Вы можете получить имя файла, но это недокументированная и может сломаться в любое обновление питона:

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

Почему вам это нужно вообще? Вы предоставили имя файла при открытии полки, так что не можете ли вы вернуться к этому оригинальному имени файла? Если вы действительно хотите, вы можете просто сохранить имя файла на результирующем объекте полки. Таким образом, вы можете обратиться к нему по имени, которое вы дали ему сами, и не зависит от внутренностей реализации:

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

Он автоматически не знает о «.dat» суффикс, добавляемый хотя.

+0

Спасибо, это решает мой вопрос, я действительно задавался этим вопросом гипотетически и не имел немедленного использования для этой информации, но я уверен, что он может пригодиться в какой-то момент. Любопытно, как вы поняли/знали эту информацию об атрибуте ._datfile? –

+0

Я просто изучил свойства, распечатав их в подсказке python ... '' print (dir (d)) '' и пошел оттуда в '' print (dir (d.dict)) '' ... –