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吧。最后一点代码就不附上了,没啥技术含量。