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的chardet库获得文件编码并修改编码
Jan 22 Python
python ansible服务及剧本编写
Dec 29 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
softmax及python实现过程解析
Sep 30 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 Python
Pandas数据类型之category的用法
Jun 28 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 输出URL的快捷方式示例代码
2013/09/22 PHP
PHP中文编码小技巧
2014/12/25 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python如何实现内容写在图片上
2018/03/23 Python
python实现随机梯度下降法
2020/03/24 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python中Django文件上传方法详解
2020/08/05 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
通信生自我鉴定
2014/01/18 职场文书
售后服务承诺书范文
2014/03/26 职场文书
党组织公开承诺书
2014/03/29 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
应聘教师自荐书
2014/06/16 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
优秀党员个人总结
2015/02/14 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
终止劳动合同通知书
2015/04/16 职场文书
投标单位介绍信
2015/05/05 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书