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中类的一些方法分析
Sep 25 Python
详解Python爬虫的基本写法
Jan 08 Python
Python中sort和sorted函数代码解析
Jan 25 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
如何利用python读取micaps文件详解
Oct 18 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 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+Ajax实现表单验证的详解
2013/06/25 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
php常用正则函数实例小结
2016/12/29 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python异常学习笔记
2015/02/03 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python函数的作用域及关键字详解
2019/08/20 Python
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
草房子读书笔记
2015/06/29 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
python 实现体质指数BMI计算
2021/05/26 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript