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 28 Python
单链表反转python实现代码示例
Feb 08 Python
python 重定向获取真实url的方法
May 11 Python
Python操作mongodb的9个步骤
Jun 04 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
Python队列、进程间通信、线程案例
Oct 25 Python
Python算法中的时间复杂度问题
Nov 19 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
python中redis包操作数据库的教程
Apr 19 Python
Python实现数据的序列化操作详解
Jul 07 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新手NOTICE错误常见解决方法
2011/12/07 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python中标准模块importlib详解
2017/04/16 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
致短跑运动员广播稿
2014/01/09 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
清明节随笔
2015/08/15 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
python文件目录操作之os模块
2021/05/08 Python