热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python实现将xml导入至excel

本文给大家讲解的是使用Python的Testlink实现将实现将xml导入至excel表格中,方法非常的简单,另外附上其他小伙伴的方法,有需要的童鞋们可以参考下。
最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意。

那求人不如尔己,自己写一个吧

需要用到的模块有:xml.dom.minidom(python自带)、xlwt

使用版本:

python:2.7.5

xlwt:1.0.0

一、先分析Testlink XML格式:

这是一个有两级testusuit的典型的testlink用例结构,我们只需要取testsuite name,testcase name,preconditions,actions,expectedresults

二、程序如下:

#coding:utf-8
'''
Created on 2015-8-20

@author: Administrator
'''
'''
'''
import xml.etree.cElementTree as ET
import xml.dom.minidom as xx
import os,xlwt,datetime

workbook=xlwt.Workbook(encoding="utf-8")
# 
booksheet=workbook.add_sheet(u'sheet_1')
booksheet.col(0).width= 5120
booksheet.col(1).width= 5120
booksheet.col(2).width= 5120
booksheet.col(3).width= 5120
booksheet.col(4).width= 5120
booksheet.col(5).width= 5120

dom=xx.parse(r'D:\\Python27\test.xml')
root = dom.documentElement
row=1
col=1

borders=xlwt.Borders()
borders.left=1
borders.right=1
borders.top=1
borders.bottom=1


style = xlwt.easyxf('align: wrap on,vert centre, horiz center') #自动换行、水平居中、垂直居中
#设置标题的格式,字体方宋、加粗、背景色:菊黄
#测试项的标题

title=xlwt.easyxf(u'font:name 仿宋,height 240 ,colour_index black, bold on, italic off; align: wrap on, vert centre, horiz center;pattern: pattern solid, fore_colour light_orange;')
item='测试项'
Subitem='测试分项'
CaseTitle='测试用例标题'
COndition='预置条件'
actiOns='操作步骤'
Result='预期结果'
booksheet.write(0,0,item,title)
booksheet.write(0,1,Subitem,title)
booksheet.write(0,2,CaseTitle,title)
booksheet.write(0,3,Condition,title)
booksheet.write(0,4,actions,title)
booksheet.write(0,5,Result,title)
#冻结首行
booksheet.panes_frozen=True
booksheet.horz_split_pos= 1


#一级目录
for i in root.childNodes:
  testsuite=i.getAttribute('name').strip()
  #print testsuite
  #print testsuite
  '''
  写测试项
  '''
  print "row is :",row
  booksheet.write(row,col,testsuite,style)
  

  #二级目录
  for dd in i.childNodes:
    print "    %s" % dd.getAttribute('name')
    testsuite2=dd.getAttribute('name')
    if not dd.getElementsByTagName('testcase'):
      print "Testcase is %s" % testsuite2
      row=row+1
      booksheet.write(row,2,testsuite2,style)  #写测试分项
    
    row=row+1
    
    booksheet.write(row,1,testsuite2,style)
    itemlist=dd.getElementsByTagName('testcase')
    
    for subb in itemlist:
      #print "         %s" % subb.getAttribute('name')
      testcase=subb.getAttribute('name')
      
      row=row+1
      booksheet.write(row,2,testcase,style)

      ilist=subb.getElementsByTagName('preconditions')
      for ii in ilist:
        precOnditions=ii.firstChild.data.replace("
"," ") col=col+1 booksheet.write(row,3,preconditions,style) steplist=subb.getElementsByTagName('actions') #print steplist for step in steplist: actiOns=step.firstChild.data.replace("
"," ") col=col+1 booksheet.write(row,4,actions,style) #print "测试步骤:",steplist[0].firstChild.data.replace("
"," ") expectlist=subb.getElementsByTagName('expectedresults') for expect in expectlist: result=expect.childNodes[0].nodeValue.replace("
","" ) booksheet.write(row,5,result,style) row=row+1 workbook.save('demo.xls')

写入excel的效果如下:

我们再来看个实例:

需要下载一个module:xlwt,如下是source code

import xml.dom.minidom
import xlwt
import sys

col = 0
row = 0  


def handle_xml_report(xml_report, excel):  
  problems = xml_report.getElementsByTagName("problem")
  handle_problems(problems, excel)
  

def handle_problems(problems, excel):
  for problem in problems:
    handle_problem(problem, excel)


def handle_problem(problem, excel):
  global row
  global col
  code = problem.getElementsByTagName("code")  
  file = problem.getElementsByTagName("file")  
  line = problem.getElementsByTagName("line")  
  message  = problem.getElementsByTagName("message")

  for node in code:  
    excel.write(row, col, node.firstChild.data)
    col = col + 1 
  for node in file:  
    excel.write(row, col, node.firstChild.data) 
    col = col + 1    
  for node in line:  
    excel.write(row, col, node.firstChild.data)     
    col = col + 1    
  for node in message:  
    excel.write(row, col, node.firstChild.data)     
    col = col + 1
  row = row+1
  col = 0

if __name__ == '__main__': 
  if(len(sys.argv) <= 1):
    print ("usage: xml2xls src_file [dst_file]")
    exit(0)
  #the 1st argument is XML report ; the 2nd is XLS report
  if(len(sys.argv) == 2):
    xls_report = sys.argv[1][:-3] + 'xls'
  #if there are more than 2 arguments, only the 1st & 2nd make sense
  else:
    xls_report = sys.argv[2]
  xmldoc = xml.dom.minidom.parse(sys.argv[1]) 
  wb = xlwt.Workbook()
  ws = wb.add_sheet('MOLint')
  ws.write(row, col, 'Error Code')
  col = col + 1
  ws.write(row, col, 'file')
  col = col + 1  
  ws.write(row, col, 'line')  
  col = col + 1  
  ws.write(row, col, 'Description') 
  row = row + 1
  col = 0
  handle_xml_report(xmldoc, ws)
  wb.save(xls_report)


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在Pygame中使用矩形对表面进行涂色的方法。通过查阅Pygame文档中的blit函数,可以了解到如何将一个表面的特定部分复制到另一个表面的指定位置上。具体的解决方法和参数说明在文中都有详细说明。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Python异常的捕获、传递与抛出操作,并提供了相关的操作示例。通过异常的捕获和传递,可以有效处理程序中的错误情况。同时,还介绍了如何主动抛出异常。通过本文的学习,读者可以掌握Python中异常处理的基本方法和技巧。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
author-avatar
大男孩小男淫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有