我正在这里做一些跑酷运动。从AccessDB表中获取导出的xml文件。我想从每个孩子中仅选择特定标签并将其保存在字典中,创建这些字典的列表,然后使用该列表填充SQLite自定义模型数据库。 “提取并转换”
我设法解析XML,获取子元素并找到标签及其文本。事实是,由于某些孩子没有我要找的标签,这变得很丑陋,因此它错过了钥匙,但我想默认将其设置为“ na”,并且我的代码有些混乱,如果for循环下的语句。我也设法用peewee将记录保存在数据库中。
基本上,我想从AccessDB表中提取数据,获取一些字段数据,并将它们保存在具有不同字段名称的sqlite db中。我在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()
我不是一个初学者,但仍然愿意学习,并且我确定我想念一些东西,一种更“ pythonic”的易于编写的方式,或者有一种更简单易用的方式,我实在不愿意看到。我的意思是,我的代码可以工作...“有点”,但这确实很丑陋且不完整,检查6k项目列表中的问题有点麻烦。
非常感谢!
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(),而不是我发布的内容,它将用重复的最后一个节点数据填充我的列表整个节点数。任何人都可以露面吗?
答案 0 :(得分:1)
在数据中声明标签和所需密钥的字典
desired_tags = {"PM": "maker", etc...}
for child in root:
for tags in child:
for k,v in desired_tags.items():
if k in child.tag:
d[v] = tags.text
未经测试,未构造发布的数据。