Вы можете получить имя файла, но это недокументированная и может сломаться в любое обновление питона:
>>> 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» суффикс, добавляемый хотя.
Спасибо, это решает мой вопрос, я действительно задавался этим вопросом гипотетически и не имел немедленного использования для этой информации, но я уверен, что он может пригодиться в какой-то момент. Любопытно, как вы поняли/знали эту информацию об атрибуте ._datfile? –
Я просто изучил свойства, распечатав их в подсказке python ... '' print (dir (d)) '' и пошел оттуда в '' print (dir (d.dict)) '' ... –