Я пишу класс взять файл Chrome закладок (смотрите пример ниже):Как динамически создать путь/ссылку на вложенный словарь в Python
{
"checksum": "452bebcad611a3faffb2c009099139e5",
"roots": {
"bookmark_bar": {
"children": [ {
"date_added": "13028719861473329",
"id": "4",
"name": "first bookmark",
"type": "url",
"url": "chrome://newtab/"
}, {
"children": [ {
"children": [ {
"date_added": "13026904508000000",
"id": "7",
"name": "Getting Started",
"type": "url",
"url": "https://www.mozilla.org/en-GB/firefox/central/"
} ],
"date_added": "13028740260032410",
"date_modified": "0",
"id": "6",
"name": "Bookmarks Toolbar",
"type": "folder"
}, {
"children": [ {
"date_added": "13026904508000000",
"id": "9",
"name": "Help and Tutorials",
"type": "url",
"url": "https://www.mozilla.org/en-GB/firefox/help/"
}, {
"date_added": "13026904508000000",
"id": "10",
"name": "Customise Firefox",
"type": "url",
"url": "https://www.mozilla.org/en-GB/firefox/customize/"
}, {
"date_added": "13026904508000000",
"id": "11",
"name": "Get Involved",
"type": "url",
"url": "https://www.mozilla.org/en-GB/contribute/"
}, {
"date_added": "13026904508000000",
"id": "12",
"name": "About Us",
"type": "url",
"url": "https://www.mozilla.org/en-GB/about/"
} ],
"date_added": "13028740260032410",
"date_modified": "0",
"id": "8",
"name": "Mozilla Firefox",
"type": "folder"
}, {
"date_added": "13026904551000000",
"id": "13",
"name": "Welcome to Firefox",
"type": "url",
"url": "http://www.mozilla.org/en-US/firefox/24.0/firstrun/"
} ],
"date_added": "13028740260004410",
"date_modified": "0",
"id": "5",
"name": "Imported From Firefox",
"type": "folder"
} ],
"date_added": "13028719626916276",
"date_modified": "13028719861473329",
"id": "1",
"name": "Bookmarks bar",
"type": "folder"
},
"other": {
"children": [ ],
"date_added": "13028719626916276",
"date_modified": "0",
"id": "2",
"name": "Other bookmarks",
"type": "folder"
},
"synced": {
"children": [ ],
"date_added": "13028719626916276",
"date_modified": "0",
"id": "3",
"name": "Mobile bookmarks",
"type": "folder"
}
},
"version": 1
}
преобразовать из JSON в гнездовой словарь затем извлеките URL-адрес закладки в каждой соответствующей папке с закладками в моем методе write_data
.
Как может быть любое количество папок для закладок и/или закладок, вложенных в каждую папку, я хочу вызвать метод write_data
внутри себя, чтобы он продолжал извлекать дочерние данные каждый раз, когда находит вложенную папку. Я просто не могу понять, как передать соответствующие дочерние словари в один и тот же метод.
Я попытался построить путь словаря со строкой. Я думаю, мне нужно пройти в кортеж или список ключей, чтобы прокручивать и динамически наращивать путь, но я не могу заставить его работать, а моя бедная голова разрушена!
Существует similar question, но ответ использует yield
, который полностью смутил меня и не был полностью рабочим решением. Пожалуйста помоги!
import json
import sys
import codecs
class FileExtractor(object):
def __init__(self, input_file):
self.infile = codecs.open(input_file, encoding='utf-8')
self.bookmark_data = json.load(self.infile)
def write_data(self, my_key):
for key, value in self.bookmark_data[my_key].iteritems():
if type(self.bookmark_data[my_key][key]) is dict:
print self.bookmark_data[my_key][key]['name']
for subkey, subvalue in self.bookmark_data[my_key][key].iteritems():
if subkey == "children" and len(self.bookmark_data[my_key][key][subkey]) <> 0:
print "this is a child. I can't figure out how to use write_data with this"
#self.write_data('[my_key][key][subkey]')
else:
print subkey, ": ", self.bookmark_data[my_key][key][subkey]
if(__name__=="__main__"):
stuff= FileExtractor(sys.argv[1])
stuff.write_data(('roots'))
Я не понял, что именно вы пытаетесь достичь. Можете ли вы опубликовать свой желаемый результат? – georg
спасибо thg435. то, что я пытаюсь получить, - это список закладок и их атрибутов, имя, дата и т. д. под заголовком каждой папки/подпапки. Я также хочу указать атрибуты папки, имя, дату и т. Д. – CiCi