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 (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...
随机推荐
- 初识Git->GitHub
这不是一篇教程,这是学习过程的一个记录,初次使用GitHub的小白请移步文章末尾的参考链接, 先了解Git是什么东西 Git的工作流程 操作Git 练习使用 边用边学 #--------------- ...
- C# 面试知识点网络文档整理
一 C# .NET技术 1.ASP.NET MVC如何控制权限? 2.C#.NET中的CTS.CLS和CLR? 3.什么是多线程,如何创建和如何使用?请写一个多线程单例模式? 4.什么是单例模式? 5 ...
- Springboot admin 发送邮件失败:com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
发邮件已经是老生常谈了,今天又遇到了,而且又出了各种问题.我晕哦. 我的配置是: spring.mail.host=smtp..com spring.mail.username=klxxxx spri ...
- Go 语言 map (映射)
1.Go 语言中 map 的定义及初始化: map[Key_Type]Value_Type scence := make(map[string]int) 2.Go 语言的遍历: scene := ma ...
- Javascript 使用 async 声明符和 await 操作符进行异步操作
async function 声明用于定义一个返回 AsyncFunction 对象的异步函数 await 操作符用于等待一个Promise 对象.它只能在异步函数 async function 中 ...
- Vue组件间传值 v-model
使用过Vue的同学应该都了解组件之间传值 父组件 --> 子组件 : props 子组件 --> 父组件 : 事件 其实有一种更为简单的方法,是基于上述两种方法,那就是 v-model 我 ...
- Mysql时间差计算
Mysql如何计算两个时间字段的差值?可用函数 TIMESTAMPDIFF() ----------------------------- TIMESTAMPDIFF函数,有参数设置,可以精确到天(D ...
- 循环队列搜索 Search in Rotated Sorted Array
这里比较重要的是,不要一上来就判断mid 和 target有没有关系.因为数组是无序的,这样的判断毫无结论,只会搞的更复杂.应该先想办法判断出哪一侧是有序的. class Solution { pub ...
- python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口
额,我想表达的是使用os.system()打开另一个可执行文件,然后等待其结束,关闭cmd窗口 主要是我突发奇想想装逼; 如果只是用multiprocessing库的多进程,然后输出信息的话,根本没法 ...
- python的车牌号的检测
自己总结一下,从网上找到的关于车牌号的识别的一些博文.https://www.jianshu.com/p/fcfbd3131b84 https://www.cnblogs.com/do-hardwor ...