zoukankan      html  css  js  c++  java
  • python之excel自动报表

    一、自动报表前期工作:

       需要安装XlsxWriter模块,可以从github上下载以后解压、setup.py install。

    二、程序:

    #!/usr/bin/env python
    # -*- coding=utf8 -*-
    
    
    import os
    import re
    import xlsxwriter
    import sys
    import collections
    
    # salt 172.18.144.69 cmd.run "salt-call hdfs_capacity.hdfs_cap decare"
    def check_capacity():
        value_dicts=collections.OrderedDict()
        ns_list=str(os.popen("cat /software/servers/hadoop-2.7.1/etc/hadoop/hdfs-site.xml|grep -A 1 dfs.nameservices|grep -v dfs.nameservices| awk -F '>|<' '{print $3}'").read().strip().split("
    ")).strip("['']").split(",")
        for ns in ns_list:
            result=os.popen("su - hadp -c 'hadoop dfs -count -q hdfs://%s/user/*'"%ns).read()
            lists=[]
            for line in result.strip().split("
    "):
                temp_list = [i for i in re.split('|+',line.strip().replace(" ","|")) if i !=' ']
                temp_value = str(int(temp_list[6])/1024/1024/1024)
                temp_list[6] = temp_value
                lists.append(temp_list[4:])
            value_dicts[ns]=sorted(lists, key=lambda temp:int(temp[2]),reverse=True)
        return value_dicts
    
    def xml(value_dicts,cluster_name):
        workbook = xlsxwriter.Workbook ('/tmp/%s_hdfs.xlsx'%cluster_name)
        worksheet = workbook.add_worksheet ()
        worksheet.set_column ('E:E', 40)
        worksheet.set_column ('B:D', 15)
        worksheet.set_row(0,20)
        #设置格式
        header_format = workbook.add_format ({'bold': True,'bg_color':'#7CCD7C','border':1,'align': 'center','valign': 'vcenter'})
        value_format = workbook.add_format ({'border':1})
        menu_format = workbook.add_format ({'bold': True,'border':1,'bg_color':'red','align': 'center','valign': 'vcenter'})
        worksheet.write ('A1', u'ns',header_format)
        worksheet.write ('B1', u'目录个数',header_format)
        worksheet.write ('C1', u'文件个数',header_format)
        worksheet.write ('D1', u'容量(单位GB)',header_format)
        worksheet.write ('E1', u'用户目录',header_format)
        ind_num=2
        num=0
        for index,keys in enumerate(value_dicts.keys()):
            ind_num+=int(num)
            num=0
            for indexs,value in enumerate(value_dicts[keys]):
                worksheet.write ('B%s'%str(int(indexs)+ind_num), value[0],value_format)
                worksheet.write ('C%s'%str(int(indexs)+ind_num), value[1],value_format)
                worksheet.write ('D%s'%str(int(indexs)+ind_num), value[2],value_format)
                worksheet.write ('E%s'%str(int(indexs)+ind_num), value[3],value_format)
                num=int(indexs)+1
            if num-1 == 0:
                worksheet.write ('A%s'%str(ind_num), keys,menu_format)
            else:
                #合并单元格
                worksheet.merge_range(ind_num-1,0, ind_num+num-2,0,keys,menu_format)
        workbook.close()
    
    def hdfs_cap(cluster_name):
        try:
            xml(check_capacity(),cluster_name)
        except Exception,e:
            return False
        else:
            return True
    
    if __name__ == "__main__":
        cluster_name=sys.argv[1]
        xml(check_capacity(),cluster_name)

    三、后续:

      考虑到本次程序是单一的,以后可以考虑到放到django中,通过salt-api来调用,并从页面出口。

  • 相关阅读:
    emberjs 循环中设置model的不同属性值
    FUTURE .get 异常抛出会如何提示
    cpu ,鲲鹏,x86,主频,门电路,目录
    复制两个类的相同属性
    【深入Java虚拟机(1)】:Java内存区域与内存溢出
    RPC web service
    webservice
    django中配置Pymsql
    定义函数和调用函数的方式,函数形参和实参的介绍
    python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/Richardzhu/p/5663291.html
Copyright © 2011-2022 走看看