每个月都要统计这些业务量的东东,烦死了,赶紧通过python写一个来搞定吧,三天搞定吧,未完待续哈。

2017-5-29 19:50粗略地做了一个思维导图哈

终于第三天完成啦

 #encoding=utf-8
import cx_Oracle as oracle
import MYSQLdb as mysql
from datetime import datetime
import xlsxwriter
import sys
'''
author:poleaxe
function:实现统计应用业务量
原理:读取按照格式的yewu.sql,再将SQL分别查询并返回结果到列表,
最后创建xlsx文件并写入列表结果 yewu.sql格式:
--系统
--业务指标
--数据库
select count(1)/#day from dual
where createdate > #starttime
and createdate < #endtime
--end
依此类推
'''
reload(sys)
sys.setdefaultencoding('gbk')
username = ''
password = ''
epcis = ''
epods = ''
cxcc = ''
nba4ot = ''
claim = ''
sqlfile = 'yewu.sql'
day=''
starttime = '2017-05-01'
endtime = '2017-06-01' #格式化yewu.sql文件,按照系统、业务、数据库、SQL分割为一个二维列表
def sql_file(sqlfile):
a = open(sqlfile).read.split('--end')
b = []
for i in a:
if i=='' or i =="\n\n":
continue
for j in i.split('--'):
b.append(j.strip()) #清理列表元素空格
arr1 = []
arr2 = []
flag = 0
for k in b:
while flag >3: #创建有4个元素的arr2加入arr1列表
arr1.append(arr2)
#初始化arr2
flag = 0
arr2 = []
print arr1
else:
if k!='' and k!='\n\n' and k!='\n\n\n':
arr2.append(k)
flag += 1
#替换列表里的#day、#starttime及#endtime
for i in range(len(arr1)):
arr1[i][3] = arr1[i][3].replace("#day",day)
arr1[i][3] = arr1[i][3].replace("#starttime",starttime)
arr1[i][3] = arr1[i][3].replace("#endtime", endtime)
return arr1 #查询二维列表的oracle SQL语句
def oracle_select(db,sqlstr):
listnew = ''
sql = ''
try:
conn = oralce.connect(username,password,db)
cur = conn.cusor()
sql = cur.excecute(sqlstr)
except Exception, e:
print e.message
else:
listnew = sql.fetchone()
cur.close()
conn.close
return listnew #查询没有mysql数据库的,果断pass哈
def mysql_select(db,sql):
pass #创建EXCEL表格
def write_excel(info):
date_now == datetime.now().strftime("%Y%m%d")
xlsxfilename = '产险IT经营情况报表'.decode('utf-8').encode('gbk')
workbook = xlsxwriter.Workbook(xlsxfilename,{'constant_memory':True})
worksheet = workbook.add_worksheet()
title = ["关键系统名称","业务类别","数据库","日均业务量"]
for i in range(len(title):
worksheet.write(0,i,title[i].decode('uft-8').encode('gbk'))
for i in range(len(info)):
for row, row_date in enumerate(info[i]):
print row,row_date
worksheet.write(i+1,row,row_date)
workbook.close()
return xlsxfilename def main():
info = sql_file(sqlfile)
list_result = []
for sql in info:
list_result.append(oracle_select(sql[2],sql[3])
listnew = []
for i in list_result:
listnew.append(i[0])
for j in range(len(info)):
info[j][3] = listnew[j]
print info
write_excel(info) if __name__ == '__main__':
main()

20170529计划---统计业务量并生成EXCEL通过邮件发送的更多相关文章

  1. 生成统计数据并导出Excel

    需求:看如下表格的统计需求 生产调度中心部门需要从IT技术部门得到这些统计数据 步骤: (1)获取所有的子公司列表 (2)遍历所有的子公司,获取每个子公司的库存信息 (3)遍历所有的库存信息,并对库存 ...

  2. Python实战 :2017国考职业表excel转数据库,再查询生成excel

    最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7   x ...

  3. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  4. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  5. XLSTransformer生成excel文件

    jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符                 XLSTransformer transformer = new XL ...

  6. 用python读文件如.c文件生成excel文件

    记录一下,如何实现的,代码如下: #!/usr/bin/env python # coding=utf-8 # 打开文件 import xlwt import re import sys bookfi ...

  7. python查询mysql并生成excel表

    需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...

  8. python生成Excel图表(通过xlsxwriter)

    前面介绍了pandas的简单用法,pandas的数据可以通过matlab第三方包将数据生成报表,但是我想将报表生成在Excel中,这时候就可以借助xlsxwriter第三方包来生成图标   缺点:xl ...

  9. org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI

    优点:不依赖Microsoft组件,在内存中操作excel,读写速度快.   缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...

随机推荐

  1. mongo 数据库

    一.管理mongo 配置文件在/etc/mongod.conf 默认端口27017 启动                    sudo service mongod start 停止         ...

  2. Sublime Text 3 插件

    1.快捷键:ctrl+shift+P 2.输入install package,选择install package 3.输入需要安装的插件,选择安装 4.重启sublime 1. 格式化 html-cs ...

  3. MSMQ 队列消息和死信队列

    日志消息 日志队列可以保存你操作过的消息的备份.它的好处是,一但发现前面的操作失败,可以从日志队列中重新创建出原先的消息对象,然后再进行操作. 例如,向远方发送一个消息对象,然后对方返回一个失败的确认 ...

  4. SAML 2.0初始

    一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain ...

  5. activiti-6.0工作流应用模板

     acriviti6.0官方操作指南:https://www.activiti.org/userguide/#demo.setup.one.minute.version 下载 acriviti6.0压 ...

  6. Java学习--枚举

    枚举类型enum,地位等同于class,interface 使用enum定义的枚举类型,也是一种变量类型,可用于声明变量 枚举的一些特征 1.它不能有public的构造函数,这样做可以保证客户代码没有 ...

  7. 如何引入.graphql文件并优雅的使用fragment

    你还在为代码中放入长长的模版字符串所苦恼吗,如下图代码片段: ps:这个是grqphql client在nodejs后端项目的实践,如果你是在前端使用graphql,并使用了webpack,那么这些问 ...

  8. 怎样用Python的Scikit-Learn库实现线性回归?

    来源商业新知号网,原标题:用Python的Scikit-Learn库实现线性回归 回归和分类是两种 监督 机器 学习算法, 前者预测连续值输出,而后者预测离散输出. 例如,用美元预测房屋的价格是回归问 ...

  9. JS实现将数字金额转换为大写人民币汉字

    function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', ...

  10. python入门(十五):装饰器

    1.装饰器(decorator):设计模式 作用:给不同的函数和方法,增加不同的公用的功能. @classmethod,@staticmethod等均是装饰器 定义一个装饰函数,函数必须返回一个闭包函 ...