通过转换成dict将xml文件数据加载到单个postgres表中

时间:2019-11-10 18:58:19

标签: python list dictionary

我有不同的xml文件,例如具有相同结构的1.xml,2.xml,3.xml

XML数据如下所示

<report>
    <report_header type='comp1'  title='industry' year='2019' />
        <report_body>
        <Prod name='krishna' id='11' place='usa'>
            <License state='aus' area= 'street1'>
            </License>
            <License state='mus' area= 'street2'>
            </License>
            <License state='mukin' area= 'street3'>
            </License>
        </Prod>
        <Prod name='ram' id='12' place='uk'>
            <License state='junej' area= 'street4'>
            </License>
            <License state='rand' area= 'street5'>
            </License>
            <License state='gandhi' area= 'street6'>
            </License>
        </Prod>
        <Prod name='chand' id='13' place='london'>
            <License state='nehru' area= 'street7'>
            </License>
            <License state='mahatma' area= 'street8'>
            </License>
            <License state='park' area= 'street9'>
            </License>
        </Prod>
    </report_body>
 </report>    

我希望基于target中的列名加载数据。

类型,标题,年份,名称,id,位置,州,地区

comp1,industry,2019,克里希纳,11,美国,澳大利亚,街道1

comp1,industry,2019,krishna,11,usa,mus,street2

comp1,industry,2019,krishna,11,usa,muskin,street3

comp1,industry,2019,ram,12,uk,junej,street4

comp1,industry,2019,ram,12,uk,rand,street5

comp1,industry,2019,ram,12,uk,gandhi,street6

现在,我无法将数据转换为词典列表。

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
my_text = [item.attrib for item in tree.iter()]
print(my_text)

数据:[{}, {'type': 'comp1', 'title': 'industry', 'year': '2019'}, {}, {'name': 'krishna', 'id': '11', 'place': 'usa'}, {'state': 'aus', 'area': 'street1'}, {'state': 'mus', 'area': 'street2'}, {'state': 'mukin', 'area': 'street3'}, {'name': 'ram', 'id': '12', 'place': 'uk'}, {'state': 'junej','area': 'street4'}, {'state': 'rand', 'area': 'street5'},{'state': 'gandhi', 'area': 'street6'}, {'name': 'chand','id': '13', 'place': 'london'}, {'state': 'nehru', 'area': 'street7'}, {'state': 'mahatma', 'area': 'street8'}, {'state': 'park', 'area': 'street9'}]

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
my_text = [item.attrib for item in tree.iter()]
print(my_text)

我的输出应该像 comp1,industry,2019,krishna,11,usa,aus,street1-使用键值对加载到目标表中

代码:

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
way_list=[]
for item in root.iter():
  way_list.append(dict(item.attrib))
for k, v in [(k, v) for x in way_list for (k, v) in x.items()]:
  print(k,v)

输出: 输入comp1

标题行业

2019年

21岁

名字奎师那

id 11

放置美国

状态aus

区域街道1

状态mus

区域街道2

状态mukin

区域街道3

名称ram

id 12

放置英国

国家六月

区域街道4

国家兰特

区域街道5

甘地州

区域街道6

名字chand

id 13

伦敦广场

状态nehru

区域街道7

圣雄状态

区域街道8

国家公园

地区街道9

预期产量: [{类型:'comp1',标题:'industry',年份:2019,年龄:21,名称:'krishna',id:11,地点:'usa' ,state:'aus',area:'street1'},{type:'comp1',title:'industry',年份:2019,年龄:21,name:'krishna',id:11,place:'usa' ,state:'mus',area:'street2'},{type:'comp1',title:'industry',年份:2019,年龄:21,name:'krishna',id:11,place:'usa' ,state:'muskin',area:'street3'},{type:'comp1',title:'industry',年份:2019,年龄:21,name:'ram',id:12,place:'uk' ,state:'junej',area:'street4'},{type:'comp1',title:'industry',年份:2019,年龄:21,name:'ram',id:12,place:'uk' ,state:'rand',area:'street5'},.........等]

我的主要目的是将数据加载到如下表中:

类型,标题,年份,名称,id,位置,州,地区

comp1,industry,2019,克里希纳,11,美国,澳大利亚,街道1

comp1,industry,2019,krishna,11,usa,mus,street2

comp1,industry,2019,krishna,11,usa,muskin,street3

comp1,industry,2019,ram,12,uk,junej,street4

comp1,industry,2019,ram,12,uk,rand,street5

comp1,industry,2019,ram,12,uk,gandhi,street6

现在,我无法将数据转换为词典列表。

0 个答案:

没有答案