20170529计划---统计业务量并生成EXCEL通过邮件发送
每个月都要统计这些业务量的东东,烦死了,赶紧通过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通过邮件发送的更多相关文章
- 生成统计数据并导出Excel
需求:看如下表格的统计需求 生产调度中心部门需要从IT技术部门得到这些统计数据 步骤: (1)获取所有的子公司列表 (2)遍历所有的子公司,获取每个子公司的库存信息 (3)遍历所有的库存信息,并对库存 ...
- Python实战 :2017国考职业表excel转数据库,再查询生成excel
最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7 x ...
- 在.NET中使用EPPlus生成Excel报表 .
--摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- XLSTransformer生成excel文件
jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符 XLSTransformer transformer = new XL ...
- 用python读文件如.c文件生成excel文件
记录一下,如何实现的,代码如下: #!/usr/bin/env python # coding=utf-8 # 打开文件 import xlwt import re import sys bookfi ...
- python查询mysql并生成excel表
需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...
- python生成Excel图表(通过xlsxwriter)
前面介绍了pandas的简单用法,pandas的数据可以通过matlab第三方包将数据生成报表,但是我想将报表生成在Excel中,这时候就可以借助xlsxwriter第三方包来生成图标 缺点:xl ...
- org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI
优点:不依赖Microsoft组件,在内存中操作excel,读写速度快. 缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...
随机推荐
- 微信小程序学习 一
1. 目录结构 app.js —— 必须配置Page({}) 在新版本中 app.json —— 注册,路由不用加后缀,是将整个文件里面的四个文件都注册进去,并且做关联,所以在页面中就不需要引用 ...
- opencv人脸检测,旋转处理
年会签到,拍自己的大头照,有的人可能会拍成横向的,需要旋转,用人脸检测并修正它(图片). 1. 无脑检测步骤为: 1. opencv 读取图片,灰度转换 2. 使用CascadeClassifier( ...
- http协议,servlet的生命周期
1.http协议(http协议是无状态的) http协议是指计算机通信网络中两台计算机进行通信必须共同遵守的规定或规则,它允许将超文本标记语言(html)文档从web服务器传送到客户端的浏览器(目前我 ...
- 如果在springboot中设置了 修改了默认页面的指向 使用thymleaf模板 而请求不到静态资源 可能是
@Configurationpublic class DefaultView extends WebMvcConfigurerationSupport { @Override public void ...
- JEECG 3.7.8 新版表单校验提示风格使用&升级方法(validform 新风格漂亮,布局简单)
JEECG 表单校验采用的是validform,默认的校验提示需要占用页面布局,提示效果较传统.jeecg这个自定义的校验提示风格,不占用页面布局,提示效果也更美观,简单易用,让表单看起来更漂亮!!! ...
- java并发编程概念
并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其 ...
- Java demo之时间
jdk原生 public class Start { public static void main(String[] args) { SimpleDateFormat simpleDateForma ...
- zabbix添加自定义监控项目
在zabbix里添加一个自定义监控项目,简单做个笔记,怕忘了 首先需要定义 zabbix_agentd.conf 中的 UnsafeUserParameters 修改为 UnsafeUserPara ...
- jenkins grunt 自动构建流程
1. grunt生成的压缩文件不建议上传到svn,src里的源码和grunt,npm的配置文件保存在svn里就够了2. grunt有watch任务,src里的文件改变了可以自动执行任务,比如压缩,3. ...
- Spring 获取bean 几种方式
转载自: http://www.cnblogs.com/luoluoshidafu/p/5659574.html 1.读取xml文件的方式,这种在初学入门的时候比较适用 . ApplicationCo ...