前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python将日志导入数据库代码案例 3

python将日志导入数据库代码案例 3

作者头像
py3study
发布2020-01-14 10:56:43
4640
发布2020-01-14 10:56:43
举报
文章被收录于专栏:python3
代码语言:javascript
复制
#!/usr/bin/env python
#-*-coding:utf-8-*-
#平台收入日报
#****************************************使用说明****************************************************
# 内网测试通过命令行参数
# -d 指定统计时间
# -p 指定日志所在目录
# -t 指定临时文件存放目录
# 示例如下:
# [ying@localhost tongji]$ ./channelincomeDaily.py -d 20141112 -p /home/zhaoying/log/ -t /home/zhaoying/tongji/
# 外网无需加参数,使用默认值
#****************************************使用说明****************************************************
import MySQLdb
import os, sys, re,string
import time, tarfile,getopt
optmap = {
                'dbuser' : 'haoren',
                'dbpass' : '123654',
                'dbhost' : '192.168.10.13',
                'dbport' : 3306,
                'dbname' : 'GHKMDB'
                 }
def get_files(dir, pattern):
        res_file_list =[]
        if os.path.exists(dir):
                cur_file_list = os.listdir(dir)
                cur_file_list.sort()
                for file_name in cur_file_list:
                        if re.search(pattern, file_name):
                                res_file_list.append(file_name)
                return res_file_list
        else:
                return 'no'
def main():
        #外网环境默认参数
        cur_day = time.strftime("%Y%m%d", time.localtime(time.time()-86400))
        log_day = time.strftime('%y%m%d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))
        logdirname = "/home/haoren/logdir/%s_67"%log_day
        tmpdirname = "/tmp/"
        logname = "billserver"
        #内网测试指定参数
 opts, args = getopt.getopt(sys.argv[1:], 'd:p:t:')
        for op, value in opts:
                if op == '-d':
 m = re.search('[0-9]{8}', value)
                        if m:
                                cur_day = value
                                print cur_day
                                log_suffix = time.strftime('%y%m%d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))
                                logname = "billserver.log"
                                log_day = time.strftime('%y%m%d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))
                                logdirname = "/home/haoren/logdir/%s_67"%log_day
                        else:
                                print "请输入8位日期(比如:20130215)"
                                return 'no'
                elif op == '-p':
 logdirname = str(value)
                elif op == '-t':
                        tmpdirname = str(value)
        fmt_day = time.strftime('%Y-%m-%d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))
        d_time = time.mktime(time.strptime(fmt_day,'%Y-%m-%d'))
        print '统计日期:',fmt_day
        print '日志名称:',logname
        print '日志路径:',logdirname
        print '临时文本:',tmpdirname
        #平台收入
        if os.path.exists("%schannelincome.txt"%tmpdirname):
                os.system("rm -f %schannelincome.txt"%tmpdirname)
        #平台人民币总量
        if os.path.exists("%schannelallgold.txt"%tmpdirname):
                os.system("rm -f %schannelallgold.txt"%tmpdirname)
 file_list=get_files(logdirname, logname)
        for file in file_list:
                command = "cat %s/%s | awk '/物品统计/'>> %schannelincome.txt"%(logdirname,file,tmpdirname)
 os.system(command)
                command = "cat %s/%s | awk '/平台人民币统计/'>> %schannelallgold.txt"%(logdirname,file,tmpdirname)
                os.system(command)
        #平台收入
        filename='%schannelincome.txt'%tmpdirname
        a_file = open(filename, 'r')
        #平台消耗用户总人民币
        allcoin={}
        #平台人民币收入
        goldincome={}
        #平台总人民币
        channelallgold = {}
        #平台物品
        channelprops = {}
        #130815-15:01:06 Bill[990]  INFO: [物品统计]平台(210043)等级(9)用户(21000162)赠送(1)个物品(3)给歌唱家(21000264),歌唱家等级(1),签约(0), 消耗人民币(10), 歌唱家获得人民币(470), 平台获得人民币(30)
        for a_line in a_file.readlines():
                m = re.search("^(\S+) Bill\[\d+\]  INFO: \[物品统计\]平台\((\d+)\)等级\((\d+)\)用户\((\d+)\)赠送\((\d+)\)个物品\((\d+)\)给歌唱家\((\d+)\),歌唱家等级\((\d+)\),签约\((\d+)\), 消耗人民币\((\d+)\), 歌唱家获得人民币\((\d+)\), 平台获得人民币\((\d+)\)", a_line)
                if m:
                        channelid = int(m.group(2))
                        propnum = int(m.group(5))
                        propid = int(m.group(6))
                        signflag = int(m.group(9))
                        coin = int(m.group(10))
                        gold = int(m.group(12))
                        #离线用户signflag传入的是平台号
 if (signflag != 0 and signflag != 1):
                                if (signflag == int(m.group(2))):
                                        signflag = 1
                                else:
                                        signflag = 0
                        if (channelid in channelprops):
                                if (propid in channelprops[channelid]):
                                        channelprops[channelid][propid] += propnum
                                        allcoin[channelid][propid] += coin
                                        goldincome[channelid][propid][signflag] += gold
                                else:
                                        channelprops[channelid][propid] = propnum
                                        allcoin[channelid][propid] = coin
                                        goldincome[channelid][propid] = {}
                                        goldincome[channelid][propid][0] = 0
                                        goldincome[channelid][propid][1] = 0
                                        goldincome[channelid][propid][signflag] = gold
                        else:
                                channelprops[channelid]={}
                                channelprops[channelid][propid] = propnum
                                allcoin[channelid] = {}
                                allcoin[channelid][propid] = coin
                                goldincome[channelid]={}
                                goldincome[channelid][propid]={}
                                goldincome[channelid][propid][0]=0
                                goldincome[channelid][propid][1]=0
                                goldincome[channelid][propid][signflag]=int(m.group(12))
        for key in channelprops:
                print '平台:',key
        a_file.close()
        #平台总人民币统计
        #平台总人民币
        filename='%schannelallgold.txt'%tmpdirname
        a_file = open(filename, 'r')
        #平台总人民币
        allgold={}
        #130816-15:28:45 Bill[990]  INFO: [平台人民币统计]平台(210043)当前人民币(308864653)
        for a_line in a_file.readlines():
                m = re.search("^(\S+) Bill\[\d+\]  INFO: \[平台人民币统计\]平台\((\d+)\)当前人民币\((\d+)\)", a_line)
                if m:
 allgold[int(m.group(2))] = int(m.group(3))
        for key in allgold:
                print'平台:%lu,人民币总量:%u'%(key,allgold[key])
        a_file.close()
        db_conn = MySQLdb.connect(user=optmap['dbuser'], passwd=optmap['dbpass'], host=optmap['dbhost'], port=optmap['dbport'], db=optmap['dbname'])
 db_cursor=db_conn.cursor()
 db_conn.query("use %s"%optmap['dbname'])
        tabletime = time.strftime("%Y%m%d", time.localtime(time.mktime(time.strptime(cur_day, "%Y%m%d"))))
        sql="CREATE TABLE IF NOT EXISTS `CHANNELEARNINGDAILY_%s` like CHANNELEARNINGDAILY_SAMPLE"%tabletime
        db_conn.query(sql)
        db_conn.query("delete from CHANNELEARNINGDAILY_%s"%tabletime)
 for key in channelprops:
                if(key not in allgold):
                        allgold[key]=0
                for kitem in channelprops[key]:
                        db_conn.query("insert into CHANNELEARNINGDAILY_%s(CHANNELID,RECVITEMTOTALCOIN,SIGNGOLD,NONSIGNGOLD,CURGOLD,ITEMID,ITEMNUM ) values(%d,%d,%d,%d,%d,%d,%d)"%(tabletime,int(key),int(allcoin[key][kitem]),int(goldincome[key][kitem][1]),int(goldincome[key][kitem][0]),int(allgold[key]),int(kitem),int(channelprops[key][kitem])))
        db_conn.commit()
        db_cursor.close()
        db_conn.close()
main()
#if __name__ == "__main__":
#        main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档