python 解析xml文件写入excel

      本文目的是用python的ElementTree和xlwt解析xml文件并写入excel,在网上和官网看了一些示例,都是一些基本用法,简单例子,个人觉得不够实用,所以整理了此篇博客,把xml文件中的城市环境监测站点名称和代码,将数据提取保存到excel中。废话不多说直接上代码

1.需要解析的datas.xml文件,由于文件内容比较多,所以只截取部分,需要提取的内容为

Pointers/Images/Image/Name和Pointers/Images/Image/Url下的数据

如下所示

<?xml version="1.0" encoding="UTF-8"?>
<Result>
		<City>
			<Name>石家庄市</Name>
			<DataTime>03/31 15:00</DataTime>
			<AQI>107</AQI>
			<Level>轻度污染</Level>
			<Type>2</Type>
			<LevelIndex>3</LevelIndex>
			<MaxPoll>PM2.5</MaxPoll>
			<Color>0xFF7E00</Color>
			<Intro>易感人群症状有轻度加剧,健康人群出现刺激症状</Intro>
			<Tips>儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼</Tips>
			<ShowDetail>true</ShowDetail>
			<Polls>
				<Poll>
					<Name>SO2</Name>
					<Value>0.026</Value>
					<Count>0</Count>
					<IAQI>9</IAQI>
				</Poll>
				<Poll>
					<Name>CO</Name>
					<Value>1.55</Value>
					<Count>0</Count>
					<IAQI>16</IAQI>
				</Poll>
				<Poll>
					<Name>NO2</Name>
					<Value>0.034</Value>
					<Count>0</Count>
					<IAQI>17</IAQI>
				</Poll>
				<Poll>
					<Name>O3-1H</Name>
					<Value>0.062</Value>
					<Count>0</Count>
					<IAQI>20</IAQI>
				</Poll>
				<Poll>
					<Name>O3-8H</Name>
					<Value>0.036</Value>
					<Count>0</Count>
					<IAQI>0</IAQI>
				</Poll>
				<Poll>
					<Name>PM2.5</Name>
					<Value>0.08</Value>
					<Count>0</Count>
					<IAQI>107</IAQI>
				</Poll>
				<Poll>
					<Name>PM10</Name>
					<Value>0.128</Value>
					<Count>0</Count>
					<IAQI>89</IAQI>
				</Poll>
			</Polls>
			<Images>
				<Image>
					<Name>市区西南高教</Name>
					<Url>image/1300000102.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区世纪公园</Name>
					<Url>image/1300000101.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区22中南校区</Name>
					<Url>image/1300000103.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区职工医院</Name>
					<Url>image/1300000104.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区人民会堂</Name>
					<Url>image/1300000105.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区西北水源</Name>
					<Url>image/1300000106.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区高新区</Name>
					<Url>image/1300000107.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>市区封龙山</Name>
					<Url>image/1300000113.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>井陉矿区区委大楼</Name>
					<Url>image/1300000116.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>井陉矿区南寨小学</Name>
					<Url>image/1300000199.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>井陉县气象局</Name>
					<Url>image/1300000117.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>井陉县3502生活区</Name>
					<Url>image/1300000192.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>正定联通公司</Name>
					<Url>image/1300000127.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>正定县公安消防大队</Name>
					<Url>image/1300000191.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>正定县党校</Name>
					<Url>image/1300000190.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>栾城通讯公司</Name>
					<Url>image/1300000118.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>栾城六中</Name>
					<Url>image/1300000194.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>栾城区环保局</Name>
					<Url>image/1300000193.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>行唐县委办公楼</Name>
					<Url>image/1300000125.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>行唐启明中学</Name>
					<Url>image/1300000189.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>灵寿供水</Name>
					<Url>image/1300000124.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>灵寿县市场管理局</Name>
					<Url>image/1300000188.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>高邑县政府</Name>
					<Url>image/1300000120.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>高邑镇政府</Name>
					<Url>image/1300000187.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>深泽供电局</Name>
					<Url>image/1300000130.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>深泽华丽大楼</Name>
					<Url>image/1300000186.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>赞皇县政府</Name>
					<Url>image/1300000121.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>赞皇中学</Name>
					<Url>image/1300000180.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>无极环保局</Name>
					<Url>image/1300000129.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>无极卫计局</Name>
					<Url>image/1300000179.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>平山冶河</Name>
					<Url>image/1300000131.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>平山县县政府</Name>
					<Url>image/1300000177.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>元氏住建局</Name>
					<Url>image/1300000119.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>元氏县气象局</Name>
					<Url>image/1300000176.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>赵县环保局</Name>
					<Url>image/1300000133.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>赵县县政府</Name>
					<Url>image/1300000178.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>赵县文广新局</Name>
					<Url>image/1300000175.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>辛集市政府</Name>
					<Url>image/1300000132.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>辛集采油五厂</Name>
					<Url>image/1300000171.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>辛集城管大队</Name>
					<Url>image/1300000170.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>藁城市环保局</Name>
					<Url>image/1300000122.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>藁城实验学校</Name>
					<Url>image/1300000197.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>藁城八中</Name>
					<Url>image/1300000198.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>晋州博纳德</Name>
					<Url>image/1300000123.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>晋州市人民政府</Name>
					<Url>image/1300000174.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name></Name>
					<Url>image/.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>新乐市委东楼</Name>
					<Url>image/1300000126.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>新乐实验学校</Name>
					<Url>image/1300000173.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>新乐市卫生局</Name>
					<Url>image/1300000172.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>鹿泉一中</Name>
					<Url>image/1300000128.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>鹿泉住建局</Name>
					<Url>image/1300000196.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
				<Image>
					<Name>鹿泉区环保局</Name>
					<Url>image/1300000195.jpg?time=0031150000</Url>
					<DataTime>03/31 15:00</DataTime>
				</Image>
			</Images>
			<Pointers>
				<Pointer>
				    <City>石家庄市</City>
				    <Region>桥西区</Region>
					<Name>市区西南高教</Name>
					<DataTime>03/31 15:00</DataTime>
					<AQI>108</AQI>
					<Level>轻度污染</Level>
					<LevelIndex>3</LevelIndex>
					<MaxPoll>PM2.5</MaxPoll>
					<Color>0xFF7E00</Color>
					<Intro>易感人群症状有轻度加剧,健康人群出现刺激症状</Intro>
					<Tips>儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼</Tips>
					<CLng>114.467</CLng>
					<CLat>38.012</CLat>
					<ShowDetail>true</ShowDetail>
					<Polls>
						<Poll>
							<Name>SO2</Name>
							<Value>0.022</Value>
							<Count>0.022</Count>
							<IAQI>8</IAQI>
						</Poll>
						<Poll>
							<Name>CO</Name>
							<Value>1.505</Value>
							<Count>1.505</Count>
							<IAQI>15</IAQI>
						</Poll>
						<Poll>
							<Name>NO2</Name>
							<Value>0.043</Value>
							<Count>0.043</Count>
							<IAQI>22</IAQI>
						</Poll>
						<Poll>
							<Name>O3-1H</Name>
							<Value>0.047</Value>
							<Count>0.047</Count>
							<IAQI>15</IAQI>
						</Poll>
						<Poll>
							<Name>O3-8H</Name>
							<Value>0.028</Value>
							<Count>0.028</Count>
							<IAQI>0</IAQI>
						</Poll>
						<Poll>
							<Name>PM2.5</Name>
							<Value>0.081</Value>
							<Count>0.081</Count>
							<IAQI>108</IAQI>
						</Poll>
						<Poll>
							<Name>PM10</Name>
							<Value>0.125</Value>
							<Count>0.125</Count>
							<IAQI>88</IAQI>
						</Poll>
					</Polls>					
					<Images>
						<Image>
							<Name>市区西南高教</Name>
							<Url>image/1300000102.jpg?time=0031150000</Url>
							<DataTime>03/31 15:00</DataTime>
						</Image>
					</Images>					
				</Pointer>
				<Pointer>
				    <City>石家庄市</City>
				    <Region>裕华区</Region>
					<Name>市区世纪公园</Name>
					<DataTime>03/31 15:00</DataTime>
					<AQI>107</AQI>
					<Level>轻度污染</Level>
					<LevelIndex>3</LevelIndex>
					<MaxPoll>PM2.5</MaxPoll>
					<Color>0xFF7E00</Color>
					<Intro>易感人群症状有轻度加剧,健康人群出现刺激症状</Intro>
					<Tips>儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼</Tips>
					<CLng>114.542</CLng>
					<CLat>38.031</CLat>
					<ShowDetail>true</ShowDetail>
					<Polls>
						<Poll>
							<Name>SO2</Name>
							<Value>0.021</Value>
							<Count>0.021</Count>
							<IAQI>7</IAQI>
						</Poll>
						<Poll>
							<Name>CO</Name>
							<Value>1.312</Value>
							<Count>1.312</Count>
							<IAQI>13</IAQI>
						</Poll>
						<Poll>
							<Name>NO2</Name>
							<Value>0.033</Value>
							<Count>0.033</Count>
							<IAQI>17</IAQI>
						</Poll>
						<Poll>
							<Name>O3-1H</Name>
							<Value>0.065</Value>
							<Count>0.065</Count>
							<IAQI>21</IAQI>
						</Poll>
						<Poll>
							<Name>O3-8H</Name>
							<Value>0.036</Value>
							<Count>0.036</Count>
							<IAQI>0</IAQI>
						</Poll>
						<Poll>
							<Name>PM2.5</Name>
							<Value>0.08</Value>
							<Count>0.08</Count>
							<IAQI>107</IAQI>
						</Poll>
						<Poll>
							<Name>PM10</Name>
							<Value>0.107</Value>
							<Count>0.107</Count>
							<IAQI>79</IAQI>
						</Poll>
					</Polls>					
					<Images>
						<Image>
							<Name>市区世纪公园</Name>
							<Url>image/1300000101.jpg?time=0031150000</Url>
							<DataTime>03/31 15:00</DataTime>
						</Image>
					</Images>					
				</Pointer>
				<Pointer>
				    <City>石家庄市</City>
				    <Region>长安区</Region>
					<Name>市区22中南校区</Name>
					<DataTime>03/31 15:00</DataTime>
					<AQI>109</AQI>
					<Level>轻度污染</Level>
					<LevelIndex>3</LevelIndex>
					<MaxPoll>PM2.5</MaxPoll>
					<Color>0xFF7E00</Color>
					<Intro>易感人群症状有轻度加剧,健康人群出现刺激症状</Intro>
					<Tips>儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼</Tips>
					<CLng>114.562</CLng>
					<CLat>38.042</CLat>
					<ShowDetail>true</ShowDetail>
					<Polls>
						<Poll>
							<Name>SO2</Name>
							<Value>0.028</Value>
							<Count>0.028</Count>
							<IAQI>10</IAQI>
						</Poll>
						<Poll>
							<Name>CO</Name>
							<Value>1.38</Value>
							<Count>1.38</Count>
							<IAQI>14</IAQI>
						</Poll>
						<Poll>
							<Name>NO2</Name>
							<Value>0.022</Value>
							<Count>0.022</Count>
							<IAQI>11</IAQI>
						</Poll>
						<Poll>
							<Name>O3-1H</Name>
							<Value>0.065</Value>
							<Count>0.065</Count>
							<IAQI>21</IAQI>
						</Poll>
						<Poll>
							<Name>O3-8H</Name>
							<Value>0.038</Value>
							<Count>0.038</Count>
							<IAQI>0</IAQI>
						</Poll>
						<Poll>
							<Name>PM2.5</Name>
							<Value>0.082</Value>
							<Count>0.082</Count>
							<IAQI>109</IAQI>
						</Poll>
						<Poll>
							<Name>PM10</Name>
							<Value>0.132</Value>
							<Count>0.132</Count>
							<IAQI>91</IAQI>
						</Poll>
					</Polls>					
					<Images>
						<Image>
							<Name>市区22中南校区</Name>
							<Url>image/1300000103.jpg?time=0031150000</Url>
							<DataTime>03/31 15:00</DataTime>
						</Image>
					</Images>					
				</Pointer>

2.python代码

from xml.etree import ElementTree as ET
import xlwt

#提取元素数据
def parseXml():
    name_list = [] #站点名称列表
    code_list = [] #站点代码列表
    pointes = [] #站点名称和代码列表

    #打开文件
    dom = ET.parse('datas.xml')
    #文档根元素
    root = dom.getroot()
    #获取Pointers标签列表
    find_tag = root.findall(".//Pointers/")
    #遍历Name
    for p in find_tag:
        dd = p.find('.//Images/Image/Name')#找到Name标签
        name_list.append(dd.text)#加入列表

    #遍历Url
    for p in find_tag:
        dd = p.find('.//Images/Image/Url')#找到Url标签
        code_list.append(dd.text[6:16])#截取代码部分,加入列表
    #将名称和代码装入pointes
    pointes.append(name_list)
    pointes.append(code_list)

    return pointes

#写入excel
def save_excel(file_path,datas):
    f = xlwt.Workbook()
    sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)

    r = 0 #行
    c = 0 #列
    for data in datas:
        for c in range(len(data)):
            sheet1.write(c,r,data[c])
        r = r + 1
    f.save(file_path)

if __name__ == '__main__':
    listdemo = parseXml()
    save_excel('aaa.xls',listdemo)





3.运行python脚本,得到数据如下:

4.OK

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值