Возникла задача: нужно загрузить в базу данных все данные из json файлов. Иерархия и состав атрибутов неизвестен, типы данных - тоже. Следующий скрипт позволяет построить набор уникальных веток дерева среди всех найденных вариантов в виде разрозненных списков. Сканируются все файлы в заданной директории.
В дальнейшем планируется доработать скрипт и выводить иерархию, а не списки, и указывать тип данных с минимальной и максимальной длиной содержимого.
import json
import io
import os
directory = 'E:\\foldername'
jstruct = {}
def dict_generator(indict, pre=None):
pre = pre[:] if pre else []
if isinstance(indict, dict):
for key, value in indict.items():
if isinstance(value, dict):
for d in dict_generator(value, [key] + pre):
yield d
elif isinstance(value, list) or isinstance(value, tuple):
for v in value:
for d in dict_generator(v, [key] + pre):
yield d
else:
yield pre + [key, value]
else:
yield indict
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".txt"):
with io.open(os.path.join(directory, filename), encoding='utf-8') as json_file:
data = json.load(json_file)
new = {tuple(x[:-1]): x[:-1] for x in dict_generator(data)}
jstruct.update(new)
continue
else:
continue
for val in jstruct.values():
print(val)
Комментариев нет:
Отправить комментарий