Python实现提取XML内容并保存到Excel中的方法


Posted in Python onSeptember 01, 2018

本文实例讲述了Python实现提取XML内容并保存到Excel中的方法。分享给大家供大家参考,具体如下:

最近做一个项目是解析XML文件,提取其中的chatid和lt、timestamp等信息,存到excel里。

1.解析xml,提取数据

使用python自带的xml.dom中的minidom(也可以用lxml)

xml文件如下:

Python实现提取XML内容并保存到Excel中的方法

minidom.parse()#解析文件,返回DOM对象
_get_documentElement()DOM是树形结构,获得了树形结构的根节点
getElementsByTagName()根据name查找根目录下的子节点
getAttribute()获取DOM节点的属性的值

提取的代码如下:

class get_xml():
  #加载获取xml的文档对象
  def __init__(self,address):
    #解析address文件,返回DOM对象,address为文件地址
    self.doc = minidom.parse(address)
    #DOM是树形结构,_get_documentElement()获得了树形结构的根节点
    self.root = self.doc._get_documentElement()
    #.getElementsByTagName(),根据name查找根目录下的子节点
    self.httpSample_nodes = self.root.getElementsByTagName('httpSample')
  def getxmldata(self):
    data_list=[]
    j = -1
    responseData_node = self.root.getElementsByTagName("responseData")
    for i in self.httpSample_nodes:
      j = j+1
      #getAttribute(),获取DOM节点的属性的值
      if i.getAttribute("lb") == "发送信息":
        a = 'chatId":"(.*?)"'
      elif i.getAttribute("lb") == "接收信息":
        # a = "chatId%3A%22(.*?)%22"
        a = "info%3A%22(.*?)%22"
      if (i.getAttribute("lb") == "发送信息" or i.getAttribute("lb") == "接收信息") and i.getAttribute("rc") == "200":
        try:
          #使用re包里面的方法,通过正则表达式提取数据
          b = re.search(a, responseData_node[j].firstChild.data)
          if b is not None:
            d = b.group(1)
            print("d:",d)
            data_list.append((d, i.getAttribute("ts"), i.getAttribute("lt"),i.getAttribute("lb")))
        except:
          pass
    return data_list

2.存储为Excel,导出数据到Excel

用到的包openpyxl,openpyxl.workbook下的Workbook()用来在内存里创建文件,最后写进磁盘的

wb = load_workbook(filename = XXXX.xlsx):读取Excel文件,文件地址为XXXX.xlsx
wb = Workbook():创建一个Workbook对象
ew = ExcelWriter(workbook = wb):新建一个excelWriter,最后用来保存
wb.create_sheet(0, 'XXX'):新建一个sheet,位置是0,sheet名字是XXX
ws = wb.worksheets[0]:打开一个sheet,sheet位置是0,即第1个sheet
ws.cell(row=1,column=1).value = XXX:在1行1列的位置加入数据XXX
ew.save(filename = XXXX.xlsx):将数据导出到本地,本地文件地址为XXXX.xlsx

一个导出Excel的例子如下:

import openpyxl
from openpyxl import writer,load_workbook
# Workbook用来在内存里创建文件最后写进磁盘的
from openpyxl.workbook import workbook, Workbook
from openpyxl.writer.excel import ExcelWriter
from openpyxl.cell import get_column_letter
# if __name__ == "__main__":
def importexcel(match,dest_filename):
  if(os.path.exists(dest_filename)):
    wb = load_workbook(filename=dest_filename)
  else:
    wb = Workbook()
  ew = ExcelWriter(workbook = wb)
  #创建一个新sheet
  wb.create_sheet(0, '聊聊发送接收请求')
  # 打开已存在的第一个sheet,也可以用get_sheet_names获得所有的sheet的名字
  ws = wb.worksheets[0]
  ws.title = "聊聊发送接收请求"
  ws.cell('A1').value = "chartid"
  ws.cell('B1').value = "接收时间戳"
  ws.cell('C1').value = "发送时间戳"
  ws.cell('D1').value = "时间戳差"
  ws.cell('E1').value = "接收lt"
  ws.cell('F1').value = "发送到接收的响应时间"
  l = 2
  for i in match:
    ws.cell(row=l,column=1).value = i['chatId']
    ws.cell(row=l,column=2).value = i['accept_timestamp']
    ws.cell(row=l,column=3).value = i['send_timestamp']
    ws.cell(row=l,column=4).value = i['timestamp_gap']
    ws.cell(row=l,column=5).value = i['accept_lt']
    ws.cell(row=l,column=6).value = i['response_time']
    print(i,l)
    l = l+1
  ew.save(filename = dest_filename)
Python 相关文章推荐
python中mechanize库的简单使用示例
Jan 10 Python
python如何在终端里面显示一张图片
Aug 17 Python
Python实现购物程序思路及代码
Jul 24 Python
python实现单向链表详解
Feb 08 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
python实现斗地主分牌洗牌
Jun 22 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
如何用用Python将地址标记在地图上
Feb 07 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 Python
python使用webdriver爬取微信公众号
Aug 31 #Python
python爬取微信公众号文章
Aug 31 #Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 #Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 #Python
浅谈Python traceback的优雅处理
Aug 31 #Python
python梯度下降法的简单示例
Aug 31 #Python
wxPython的安装与使用教程
Aug 31 #Python
You might like
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
Django模板Templates使用方法详解
2019/07/19 Python
python实现ftp文件传输功能
2020/03/20 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
村级四风对照检查材料
2014/08/24 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
2015政治思想表现评语
2015/03/25 职场文书
单独二胎证明
2015/06/24 职场文书