python读文件入库
#解析日志入库的一个例子
import MySQLdb
def readLog():
f = open('/home/flankwang/download/a.log','r')
return f.readlines()
def saveToDB(lines):
conn = MySQLdb.connect(host = 'localhost',user = '',passwd = '', db = 'test')
cursor = conn.cursor()
#删除表
sql = "DROP TABLE IF EXISTS t_log"
cursor.execute(sql)
#创建表,“\”这是一个续行符号,标识下面这几行其实是一行
sql = "CREATE TABLE t_log (\
id int(10) unsigned NOT NULL AUTO_INCREMENT, ip varchar(15) NOT NULL,\
access_time varchar(255) NOT NULL,\
c1 varchar(10) NOT NULL,c2 varchar(10) NOT NULL,c3 varchar(10) NOT NULL,c4 varchar(10) NOT NULL,\
PRIMARY KEY (id)\
) ENGINE=InnoDB DEFAULT CHARSET=utf8"
cursor.execute(sql)
#将数据插入到数据库中
sql = "INSERT INTO t_log(ip,access_time,c1,c2,c3,c4) VALUES(%s,%s,%s,%s,%s,%s)"
#先获得一个序列的集合values,然后把它转化为一个续表,用这个函数tuple
values = []
for line in lines :
#读取文件时是按行一次性读入整个文件,在每行的某位有一个换行符“\r\n”,line[0:2]就是要把这个符号去掉。然后按“|”切割,获得一个序列
elements = line[0:-2].split('|')
values.append(elements)
cursor.executemany(sql,tuple(values))
conn.commit()
cursor.close()
conn.close()
def main():
#读取日志文件、获得一个序列
lines = readLog()
#如果表已存在删除表、创建表、将数据插入表
saveToDB(lines)
-|2012-07-23 16:00:01|-|-|-|-
-|2012-07-23 16:00:01|-|-|-|-
-|2012-07-23 16:00:01|-|-|-|-
这是被解析日志的格式,以符号"|",分割
总结:这还是一个初级版本,1 没有加上异常处理,2 没有考虑一次性读入文件内存不够问题,3 没有考虑日志只有一条这个问题。
这个实验是在ubuntu上做的,所以换行符是"\r\n",如果是windows,自己测一下吧。