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中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
浅谈Python中数据解析
May 05 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
Python3远程监控程序的实现方法
Jul 15 Python
python实现简单成绩录入系统
Sep 19 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
python科学计算之narray对象用法
Nov 25 Python
pytorch实现CNN卷积神经网络
Feb 19 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
Python数据库封装实现代码示例解析
Sep 05 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中new static() 和 new self() 的区别介绍
2015/01/09 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
php session_decode函数用法讲解
2019/05/26 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python获得图片base64编码示例
2014/01/16 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
浅析python的Lambda表达式
2019/02/27 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
中层干部培训方案
2014/06/16 职场文书
工作总结与自我评价
2014/09/18 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
如何基于python实现单目三维重建详解
2022/06/25 Python