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命令行参数sys.argv使用示例
Jan 28 Python
Python中的列表知识点汇总
Apr 14 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
TensorFlow实现卷积神经网络
May 24 Python
Python3解释器知识点总结
Feb 19 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
Python图像处理之图像拼接
Apr 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实现mysql数据库备份类
2008/03/20 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
php目录拷贝实现方法
2015/07/10 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
js自带函数备忘 数组
2006/12/29 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python 全局变量的import机制介绍
2017/09/07 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
Python字符串的修改方法实例
2019/12/19 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python 常见的排序算法实现汇总
2020/08/21 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
班级心理活动总结
2014/07/04 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python