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

简介:

#!/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()











本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1895799,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
Python
python集合的创建案例分享
在Python中,通过大括号或`set()`函数可创建集合。示例包括:使用大括号 `{}` 创建带元素的集合,如 `{1, 2, 3, 4, 5}`;使用 `set()` 函数从列表转换为集合,例如 `set([1, 2, 3, 4, 5])`,以及创建空集合 `set()`。当元素有重复时,集合会自动去重,如 `set([1, 2, 2, 3, 4, 4, 5])`。但尝试将不可哈希元素(如列表、字典)放入集合会引发 `TypeError`。
13 1
|
8天前
|
监控 Python
Python中的装饰器:提升代码灵活性与可读性
在Python编程中,装饰器是一种强大的工具,能够提升代码的灵活性和可读性。本文将介绍装饰器的基本概念、使用方法以及实际应用场景,帮助读者更好地理解和利用这一功能。
|
10天前
|
人工智能 数据可视化 数据挖掘
【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】
【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】
|
9天前
|
缓存 监控 算法
优化Python代码性能的10个技巧
提高Python代码性能是每个开发者都需要关注的重要问题。本文将介绍10个实用的技巧,帮助你优化Python代码,提升程序的运行效率和性能表现。无论是避免内存泄漏、减少函数调用次数,还是使用适当的数据结构,都能在不同场景下发挥作用,使你的Python应用更加高效稳定。
|
1天前
|
JSON API 数据格式
python的request库如何拿到json的返回值
python的request库如何拿到json的返回值
4 0
|
2天前
|
Python
[重学Python]Day 2 Python经典案例简单习题6个
[重学Python]Day 2 Python经典案例简单习题6个
6 0
|
3天前
|
缓存 算法 Python
优化Python代码的十大技巧
本文介绍了十种优化Python代码的技巧,涵盖了从代码结构到性能调优的方方面面。通过学习和应用这些技巧,你可以提高Python程序的执行效率,提升代码质量,以及更好地应对复杂的编程任务。
|
3天前
|
程序员 Python
Python中的装饰器:提升代码可读性与灵活性
在Python编程中,装饰器是一种强大的工具,可以在不修改原始代码的情况下,动态地添加功能。本文将深入探讨Python中装饰器的原理、用法和实际应用,以及如何利用装饰器提升代码的可读性和灵活性。
|
4天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
5天前
|
缓存 开发者 Python
深入探讨Python中的装饰器:提升代码可读性与灵活性
在Python编程中,装饰器是一种强大的工具,可以在不修改原始函数代码的情况下,对其行为进行扩展或修改。本文将深入探讨装饰器的原理和用法,以及如何利用装饰器提升代码的可读性和灵活性,为Python开发者提供更加优雅和高效的编程方式。

热门文章

最新文章