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中使用Inotify监控文件实例
Feb 14 Python
用Python实现web端用户登录和注册功能的教程
Apr 30 Python
在Django的session中使用User对象的方法
Jul 23 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
tornado 多进程模式解析
Jan 15 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
python3爬取淘宝信息代码分析
Feb 10 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
Python爬虫开发与项目实战
Dec 16 Python
python 下划线的多种应用场景总结
May 12 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
php empty() 检查一个变量是否为空
2011/11/10 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
Django保护敏感信息的方法示例
2019/05/09 Python
python日志logging模块使用方法分析
2019/05/23 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
python函数定义和调用过程详解
2020/02/09 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
django实现日志按日期分割
2020/05/21 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
国家励志奖学金获奖感言
2014/01/09 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
工伤赔偿协议书
2014/04/15 职场文书
演讲稿的写法
2014/05/19 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang