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日志并进行多维度分析。
目录
相关文章
|
4天前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
13 1
|
1天前
|
监控 Python
Python中的装饰器:提升代码灵活性和可维护性
在Python编程中,装饰器是一种强大的工具,可以提高代码的灵活性和可维护性。本文将深入探讨装饰器的概念、用法和实际应用,帮助读者更好地理解并运用装饰器来优化自己的Python代码。
|
1天前
|
机器学习/深度学习 数据挖掘 PyTorch
10个非常有用的Python库,你知道几个?
这些库覆盖了数据科学、机器学习、Web开发和其他领域,使Python成为一个多用途的编程语言。它们在各种项目和领域中都非常有用。
15 2
|
2天前
|
算法 Java 编译器
优化Python代码性能的实用技巧
提高Python代码性能是每个开发者的关注焦点之一。本文将介绍一些实用的技巧和方法,帮助开发者优化他们的Python代码,提升程序的执行效率和性能。
|
2天前
|
SQL 关系型数据库 数据库连接
使用 Python 访问数据库的基本方法
【5月更文挑战第12天】在Python中操作数据库涉及安装数据库驱动(如mysql-connector-python, psycopg2, pymongo)、连接数据库、执行查询/更新、处理结果集及关闭连接。使用ORM(如SQLAlchemy)可简化操作。通过上下文管理器(with语句)能更好地管理资源和错误。注意根据实际需求处理事务、错误和安全性,例如使用SSL连接。
13 2
|
3天前
|
JSON 监控 调度
局域网管理软件的自动化任务调度:Python 中的 APScheduler 库的应用
使用 Python 的 APScheduler 库可简化局域网管理中的自动化任务调度。APScheduler 是一个轻量级定时任务调度库,支持多种触发方式如间隔、时间、日期和 Cron 表达式。示例代码展示了如何创建每 10 秒执行一次的定时任务。在局域网管理场景中,可以利用 APScheduler 定期监控设备状态,当设备离线时自动提交数据到网站,提升管理效率。
21 0
|
3天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
4天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
4天前
|
数据库
编程日记02:个人站优化数据库和日志
编程日记02:个人站优化数据库和日志
9 0
|
4天前
|
Python
Python中的装饰器:提升代码可读性与复用性
Python中的装饰器是一种强大的工具,能够提升代码的可读性和复用性。本文将深入探讨装饰器的原理、用法以及在实际项目中的应用,帮助读者更好地理解和利用这一特性,提升代码质量和开发效率。