Я пытаюсь сделать паркур здесь.Получил экспортированный XML-файл из таблицы AccessDB.Я хотел бы выбрать только определенные теги для каждого дочернего элемента и сохранить их в файле dict, создать список этих сообщений, а затем заполнить базу данных пользовательской модели SQLite этим списком.«Извлечь и преобразовать»
Мне удалось разобрать XML, получить дочерние элементы и найти теги и их текст.Дело в том, что это становится уродливым, так как у некоторых детей нет тега, который я ищу, поэтому он пропускает ключ, но я бы хотел по умолчанию присвоить ему значение «na», и мой код немного запутан, еслизаявления по циклу.Мне также удалось сохранить записи в базе данных с помощью peewee.
По сути, я хочу извлечь данные из таблицы AccessDB, получить некоторые данные поля и сохранить их в базе данных sqlite с другим именем поля.Я работаю в Linux и не могу получить доступ к машине AccessDB, таким образом, экспортированный файл.Если это будет слишком хлопотно, я попытаюсь запустить скрипт и подключить обе базы данных и проанализировать данные
xml_parsing_code()
for childs in root:
for tags in child:
if tags.tag == 'PM':
d['maker'] = tags.text
if ...
list.append(d)
db.create_code()
Я не новичок, но все еще загружаюсь, чтобы учиться, и я уверен, что ячто-то упущено, более "питонический" простой способ написания или более простой подход, который я слишком тупой, чтобы видеть.Я имею в виду, что мой код работает ... "вроде", но он действительно уродлив и нестабилен, и проверка на проблемы в списке элементов 6k - это немного больно.
Большое спасибо!
ОБНОВЛЕНИЕ 2: # (допустил ошибку, когда я перезаписывал пропущенные и уже заполненные значения)
import xml.etree.ElementTree as ET
tags_dict = {
"PartNo": "maker_ref",
"PM": "maker",
etc..
}
tree = ET.parse("exported_table.xml")
root = tree.getroot()
dict_list = list()
#d = dict()
for node in root:
d = dict() #instead of d.clear()
for child in node:
for k, v in tags_dict.items():
if k in child.tag:
d[v] = child.text
if v not in d:
d[v] = "na"
dict_list.append(d)
Это последний рабочий код для этой конкретной части, который, похоже, работает.Добавил "na" для отсутствующих дочерних элементов для моей новой структуры модели базы данных.
Почему-то я не могу понять, почему, если я объявляю глобальные dict () и .clear () для каждого цикла узла, вместо того, что я опубликовал, он заполняет мой список данными последнего узлаповторяется для всего количества узлов.Кто-нибудь может пролить свет?