python将IIS日志导入到SQL

import re
import os
import MySQLdb as mdb

def create_table(name): #建表函数
    create_sql = ''' #建表的SQL语句
    create table if not exists %s
    (
    ID int primary key auto_increment,
    DATE date,
    TIME time,
    URL text,
    IP char(15),
    UA text,
    REFERER text,
    STATUS int(3),
    BYTES int
    )
    ''' % name
    cursor.execute(create_sql) #执行SQL语句

def insert_table(data, name): #插入数据函数
    data = data.strip() #去掉前后空格
    if data[0] == '#': #如果以#开头,说明是表头,自动忽略
        pass
    else:
        row = data.split() #用空格分开每行数据
        insert_sql = ''' #插入数据的SQL,取其中的日期,时间,着陆URL,IP地址,UA信息,referer,状态码,下载字节数,第一项是个自动增加的主键
        insert into %s values('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
        ''' % (name, '', row[0], row[1], row[6], row[10], row[12], row[14], row[16], row[19])
        cursor.execute(insert_sql) #执行插入SQL

pat = re.compile(r'(ex\d{6})\.log') #匹配文件名的正则
rootdir = 'e:/dream' #根目录设置
conn = mdb.connect('localhost', 'root', 'root', 'dream') #连接数据库
cursor = conn.cursor() #数据库指针

for file in os.listdir(rootdir): #遍历根目录
    match = pat.match(file) #匹配文件名
    if match: #如果匹配则执行下面操作,如果不匹配就没行动
        filename = match.group(1) #匹配到的文件名,下面用作表名
        create_table(filename) #用表名建表
        f = open(os.path.join(rootdir, file)) #打开匹配到的文件
        for data in f.readlines(): #遍历文件中的每行数据
            insert_table(data, filename) #将这一行数据插入到建好的表中
        print '%s is over.' % filename #这个文件遍历后提示下

conn.close() #关闭数据库连接
print 'ok'

主要使用了MySQLdb将数据导入到数据库中。我是想使用Mysql对网站日志进行分析,于是先将每个日志导入到Mysql中,下一步将使用sql得到一系列细分数据,比如爬虫数据,流量数据等。

这个程序难度不大,主要是MySQLdb的使用,另外还有一点SQL语句。

3月12日晚补充:

尼玛,本来打算自动便利文件夹,然后创建对应table,然后插入每日数据,最后用SQL查询所需数据,前几步都完成了,到最后一步真是麻烦,重复写好多SQL查询不说,感觉一次一次的遍历,效率也很低。想想最简单的方法还是打开文件,然后用python的for来遍历,这样一次就可以遍历完了。

好赖用这个思路写完了,就当是练习MySQLdb和SQL吧。最后一点代码就不附上了,没啥技术含量。

posted on 2013-03-11 22:30  alexkh  阅读(533)  评论(0编辑  收藏  举报