拿到的文本是二進制的,在查看文件的時候能夠加上-rb以二進制讀的形式打開。mongodb
文件格式以下:數據庫
b’2019-03-29 10:55:00\t0\192.168.31.123:8080\t5\t12345678\t0\t44560\t953864\t2\t192.168.31.123\tmd5\n’
能夠看到日誌裏面的分隔符是製表符t,行末尾有換行符njson
處理日誌文件的基本邏輯數組
用於存儲日誌的mongo集羣有三個分片:flux-stat-1.mongo:27017,flux-stat-2.mongo:27017和flux-stat-3.mongo:27017.app
假設用戶名是flux-stat,密碼是flux-stat-mongo123,登陸方法:url
from pymongo import MongoClient import urllib.parse #建立MongoDB連接對象 username = urllib.parse.quote_plus(‘flux-stat’) password = urllib.parse.quote_plus(‘flux-stat-mongo123’) uri = 'mongodb://%s:%s@flux-stat-1.mongo:27017, flux-stat-2.mongo:27017, flux-stat-3.mongo:27017/admin' % (username,password) client = MongoClient(uri)
注意:username和password必需要進行轉換,不然連接不正確日誌
with open(「d:/user/ServerLog/test.txt」,’rb’) as file: for line in file: #這裏放操做 file.close()
#引入json模塊 import json total=[] logList = line.split(‘\t’) #line分割爲list keyList = [‘time’,’status’,’ip’,’type’,’userid’,’v1’,’v2’,’v3’,’v4’,’ip’,’md5’] #key的list logDict = dict(zip(keyList, logList)) #把兩者以字典的方式拼起來 logJson = json.dumps(logDict) #把字典轉換爲string形式的json #json轉字典的方法爲dictinfo = json.loads(json_str) total.append(logJson)
insert_one和insert_many是兩種插入的方式,可是採用insert_one進行逐條插入會進行大量的訪問,大幅下降插入效率,採用insert_many進行json爲基本單位的list批量插入,效率明顯提升。code
db = client['log'] #獲取數據庫 coll = db[‘data’] #獲取表 coll.insert_many(total) #插入到數據庫