首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python读资料入库

2012-08-17 
python读文件入库#解析日志入库的一个例子import MySQLdbdef readLog():f open(/home/flankwang/downlo

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,自己测一下吧。

热点排行