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脚本实现下载合并SAE日志
Feb 10 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
利用python求相邻数的方法示例
Aug 18 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
python如何生成网页验证码
Jul 28 Python
Python实现的各种常见分布算法示例
Dec 13 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python list运算操作代码实例解析
Jan 20 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 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获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
Javascript 遍历页面text控件详解
2014/01/06 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
详解python 发送邮件实例代码
2016/12/22 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Python模块文件结构代码详解
2018/02/03 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
c++工程师面试问题
2013/08/04 面试题
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
出售房屋协议书范本
2014/10/06 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技