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实现dnspod自动更新dns解析的方法
Feb 14 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python简单文本处理的方法
Jul 10 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
用django设置session过期时间的方法解析
Aug 05 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
详解Python openpyxl库的基本应用
Feb 26 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分页思路以及在ZF中的使用
2012/05/30 PHP
php 地区分类排序算法
2013/07/01 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Python: glob匹配文件的操作
2020/12/11 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
个人优缺点自我评价
2014/01/27 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
节约粮食标语
2014/06/18 职场文书
幼儿老师求职信
2014/06/30 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
清洁工工作总结
2015/08/11 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
python实现自定义日志的具体方法
2021/05/28 Python