美文网首页Python
什么,Python可以画图写报告?

什么,Python可以画图写报告?

作者: 275cafb52764 | 来源:发表于2017-05-23 10:40 被阅读855次

    工作时需整理报告用来展示该版本的质量情况,但是需要手工导出bug并整理内容,费时费力,因此,做了一个自动生成合入报告的内容,主要功能为生成bug分布图生成表格等内容。

    一、环境搭建

    报告主要有分为几个点:

    1.写入word,包括word生成表格

    2.读写excel中的内容

    3.生成饼图和直方图

    4.处理多维数组以生成图表

    接下来就针对以上几点搭建环境

    1.python_docx:比较方便使用的读写word的工具

    2.Xlrd:用于读写excel的工具

    3.Matplotlib:绘制图表时会使用到,配套的库还有dateutil和pyparsing

    4.Numpy:多维数组使用时会使用到的库

    比起写代码,搞定这么多环境才是最难的。

    Python给我们提供了一个很好用的工具pip,通过该工具可以轻松搭建python环境。通过pip install + 库名称,既可安装该库,如果遇到使用pip报了编码错误,你需要这个命令chcp 936改为gbk编码,安装好上述库就可以进行报告组装了。

    下面是报告的预览图:

    二、绘图

    可以看到这里最亮眼的就是这张饼图和直方图了,饼图统计了FT某版本各模块bug分布情况,既然要画图,那么首先需要收集数据,我的数据来源于提前生成的一份质量数据:

    数据既然从excel中来,那我们第一步就是要读取这里面的内容,这就需要了解xlrd中的内容了。

    读取过程如下:

    1、打开excel读取数据

    data = xlrd.open_workbook(self.path)

    2、获取一个工作表中的内容

    table = data.sheets()[2] #table = data.sheet_by_name(u'Sheet1') //通过名称获取

    3、获取整行整列的值并存入数组

    module = table.col_values(8) #Tag = table.row_values(i)

    写入过程如下:

    1、生成xls实例

    book = Workbook()

    2、生成sheet表

    sheet1 = book.add_sheet('Sheet 1')

    3、写入内容

    sheet1.write(0,4,''info')//在单元格0,4处输入info

    首先需要获取到第三列和第9列的内容,存在module和status两个列表中:

    module = table.col_values(8) Status = table.col_values(2)

    之后根据需求匹配到我们需要的内容进行统计,比如我们需要统计骚扰拦截模块已解决的bug,

    for i in range(0,len(module)):

    if module[i]==”骚扰拦截”and (status[i]=="已关闭" or status[i]=="已解决"):

    num = num+1’

    之后我们统计到各模块bug总数,就可以绘制饼图和直方图了,在绘制饼图时,方法如下

    colors = ['orange','lightskyblue','magenta','yellowgreen', 'gold', 'blue', 'lightcoral']

    fig = plt.figure()     plt.pie(nums,labels=labels,colors=colors,autopct='%1.2f%%')

    plt.title(name)

    plt.savefig("Pie.jpg")

    Colors数组存储饼图各部分颜色,fig = plt.figure()

    生成底图

    plt.title(name)绘制图片标题

    plt.pie(nums,labels=labels,colors=colors,autopct='%1.2f%%')绘制饼图,入参有各模块名称及各模块对应bug数量,colors标明了各部分的颜色,autopct表示展示的百分比的格式,绘制效果如下


    绘制过程中,使用到了二位数组,首先会绘制红色的部分,之后绿色蓝色浅蓝色依次进行绘制,通过plt.bar()方法绘制直方图,第一个参数表示各同色的直方相隔的距离,height和width为直方的高度和宽度,color为颜色数组中排列依次填充,label为右上角图例。List为二维数组,每个数组中的子数组为各模块对应的bug数。

    Plt.xticks绘制了x轴上的中文描述,plt.legend()负责将图例添加至图片上,plt.text给直方图上方添加数字内容,这就需要计算该数字应该出现的位置,上面的三个判断条件为判断数量是几位数,动态调整数字出现的位置,以保证该数字是摆放在直方图的中间。

    三,生成报告

    报告是生成在word文档中,这就需要python_docx这个工具了。

    首先生成document实例

    document = Document()

    之后生成新的段落

    p = document.add_paragraph()

    在段落中添加新的内容

    p.add_run('Hi all,\n\n')

    p.add_run('Hi all,\n\n').bold = True\\加粗

    p.add_run(u'符合合入标准').font.color.rgb = RGBColor(0x42, 0x24, 0xE9)\\添加颜色 document.add_picture(r"Pie.jpg", width=Inches(4))\\插入图片并定制大小

    生成表格

    table = document.add_table(rows=2, cols=5,style = 'Table Grid')\\生成一个2*5的表格,表格的格式为table grid

    更多表格格式可以用如下代码获得

    for s in styles:

    if s.type == WD_STYLE_TYPE.TABLE:             document.add_paragraph("Table style is :  "+ s.name)

    document.add_table(3,3, style = s)                     document.add_paragraph("\n")                 document.save('demo2.docx')

    根据你的需求选择合适的表格

    四、各种问题处理

    Python遇到最多的就是中文问题了,python2.x一般我们在写python代码时会,代码中会有中文,而默认编码为ascii,这时需要在头部添加#coding=utf-8,python3.x默认编码为unicode。

    从cmd中获取中文参数时,cmd通常为gbk编码(如果不是,先chcp 936),在读入python文件时需要decode(‘GBK’),转换为当前的编码格式再进行操作。

    在向word中输入中文时,需要输入的是unicode编码,因此p.add_run(u'(1) 挂起bug总数'+str(x.get_hang_up(labels))+'\n'),中文字符串前要加u将utf-8变为unicode编码。

    在安装matplotlibrc时也会遇到编码问题

    File "C:\Python27\lib\ntpath.py", line 84, in join result_path = result_path + p_path UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 1

    解决方法:把ntpath中的

    result_path = result_path + p_path

    改为:

    result_path = str(result_path) + str(p_path)

    总之,中文编码问题是很常见的,见招拆招就好,首先要明确输入端目前的编码格式是什么,输出端的编码格式要什么,再结合错误信息来回变换编码格式就好。

    作者 |蒋雪峰 腾讯系统测试工程师

    编辑 | Coding小编

    欢迎有兴趣的小伙伴微信关注“腾讯课堂”(微信号:tencent-class)收获更多福利~

    相关文章

      网友评论

        本文标题:什么,Python可以画图写报告?

        本文链接:https://www.haomeiwen.com/subject/pkpwxxtx.html