python3 log文件處理獲取某天需要的數(shù)據(jù)

問題描述:需要讀取log文件厚骗,并獲取出兩天的日志做對比示启,查詢增加或者減少量,規(guī)則化輸出
完成心得:python的字典领舰,很好用夫嗓,讀寫時間快,用法自由

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 17/8/18 下午5:08
# @Author  : lee
# @File    : read.py
# @Software: PyCharm
# 說明: code后有'#'的時測試時加的或者需要修改的code
# 用法 傳入兩個值 day1是前一天的日期 day2是后一天的內(nèi)容
import sys
def log_data(address, day1, day2):
    try:
        # 打開文件
        log = open("%s" % address)

        # 定義:
        dict_yesterday = {}  # 昨天的數(shù)據(jù)
        dict_the_day_before_yesterday = {}  # 前天的數(shù)據(jù)
        dict_yesterday_difference = {}  # 記錄昨天中有的數(shù)據(jù)冲秽,前天沒有
        dict_the_day_before_yesterday_difference = {}  # 和上一條相反
        dict_identical = {}  # 記錄兩天內(nèi)相同的數(shù)據(jù)
        dict_result = {}  # 記錄結果舍咖,輸出時讀取
        ii = jj = z = x = 0
        #遍歷 將兩個日期的日志篩選出并裝入對應的字典

        for line in log:
            log_data = ','.join(filter(lambda x: x,line.split(' ')))
            date = (log_data.split(',')[0])[-10:].replace('.','-')
            if date == day2:
                dict_yesterday[ii] = log_data
                dict_yesterday_difference[ii] = log_data
                ii += 1
            elif date == day1:
                dict_the_day_before_yesterday[jj] = log_data
                dict_the_day_before_yesterday_difference[jj] = log_data
                jj += 1



        if len(dict_yesterday) >= len(dict_the_day_before_yesterday):
            for i in dict_yesterday:
                object_list1 = (dict_yesterday[i]).split(',')
                entry_name_yesterday = ((object_list1[0]).split(',')[0])[:-10]+object_list1[1]+'-'+object_list1[2]
                for j in dict_the_day_before_yesterday:
                    object_list2 = (dict_the_day_before_yesterday[j]).split(',')
                    entry_name_tdat = ((object_list2[0]).split(',')[0])[:-10]+object_list2[1]+'-'+object_list2[2]
                    if entry_name_yesterday == entry_name_tdat:
                        dict_identical[x] = entry_name_yesterday
                        docs_result = int(((dict_yesterday[i]).split(','))[4]) - int(((dict_the_day_before_yesterday[j]).split(','))[4])
                        capacity1 = (dict_yesterday[i].split(',')[5])[-2:]
                        capacity2 = (dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                        if capacity1 == capacity2:
                            store_result = str(round(float((dict_yesterday[i].split(',')[5])[:-2]) - float((dict_the_day_before_yesterday[j].split(',')[5])[:-2]),2)) +(dict_yesterday[i].split(',')[5])[-2:]
                        # 1gb = 1024mb = 1024kb
                        elif capacity1 != capacity2:
                            n_y = round(float((dict_yesterday[i].split(',')[5])[:-2]), 2)
                            n_t = float((dict_the_day_before_yesterday[j].split(',')[5])[:-2])

                            if capacity1 == 'gb'and capacity2 == 'mb':
                                if n_y * 1024  > n_t:
                                    store_result  = str(abs(round(n_y * 1024 - n_t), 2)) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                                else:
                                    store_result  = str(round(n_y * 1024 - n_t),) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                            elif capacity1 == 'gb'and capacity2 == 'kb':
                                if n_y * 1024 * 1024 > n_t:
                                    # round(,2)
                                    store_result = str(abs(round(n_y * 1024 * 1024 - n_t,2))) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                                else:
                                    store_result = str(round(n_y * 1024 * 1024 - n_t,2)) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                            elif capacity1 == 'mb'and capacity2 == 'gb':
                                if n_y / 1024  > n_t:
                                    store_result = str(abs(round(n_y / 1024 - n_t,2))) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                                else:
                                    store_result = str(round(n_y / 1024 - n_t,2)) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                            elif capacity1 == 'mb'and capacity2 == 'kb':
                                if n_y * 1024 > n_t:
                                    store_result = str(abs(round(n_y * 1024 - n_t,2))) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                                else:
                                    store_result = str(round(n_y * 1024 - n_t,2)) +(dict_the_day_before_yesterday[j].split(',')[5])[-2:]
                            elif capacity1 == 'kb'and capacity2 == 'gb':
                                store_result = str(round(n_t - n_t * 1024 * 1024,2)) +(dict_yesterday[i].split(',')[5])[-2:]
                            elif capacity1 == 'kb'and capacity2 == 'mb':
                                if n_y / 1024  > n_t:
                                    store_result = str(abs(round(n_t - n_t * 1024,2))) +(dict_yesterday[i].split(',')[5])[-2:]
                                else:
                                    store_result = str(round(n_t - n_t * 1024,2)) +(dict_yesterday[i].split(',')[5])[-2:]

                        dict_result[z] = entry_name_tdat + ' docs: ' + str(docs_result) + ' store: ' +store_result
                        z += 1
                        x += 1

       # else:
          #  print("當前日期下沒有相關日志")


        # 篩選出昨天出現(xiàn) 前天沒有的數(shù)據(jù)
        if len(dict_yesterday) >= len(dict_identical):
            for i in dict_yesterday:
                object_list_1 = (dict_yesterday[i]).split(',')
                entry_name_yesterday_1 = ((object_list_1[0]).split(',')[0])[:-10]+object_list_1[1]+'-'+object_list_1[2]
                for j in dict_identical:
                    entry_name_identical = dict_identical[j]
                    if entry_name_yesterday_1 == entry_name_identical:
                        dict_yesterday_difference.pop(i)

        # 篩選出前天出現(xiàn) 昨天沒有的數(shù)據(jù)
        if len(dict_the_day_before_yesterday) >= len(dict_identical):
            for i in dict_the_day_before_yesterday:
                object_list_1 = (dict_the_day_before_yesterday[i]).split(',')
                entry_name_yesterday_1 = ((object_list_1[0]).split(',')[0])[:-10]+object_list_1[1]+'-'+object_list_1[2]
                for j in dict_identical:
                    entry_name_identical = dict_identical[j]
                    if entry_name_yesterday_1 == entry_name_identical:
                        dict_the_day_before_yesterday_difference.pop(i)

        # 輸出兩天都有的數(shù)據(jù)
        print("下面是 %s 和 %s 內(nèi)%s中 docs、store差值"%(day1,day2,address))
        print('')
        print("++++++++++++++++兩天都有的數(shù)據(jù)++++++++++++++++")
        for i in dict_result:
            print(dict_result[i])

        # 輸出兩天中前者中有的數(shù)據(jù)而在后者沒有出現(xiàn)锉桑,取正值(+)區(qū)別
        print('')
        if len(dict_yesterday) != 0 :
            print("++++++++++++++++只有%s有的數(shù)據(jù)取正值(+)予以區(qū)別++++++++++++++++"%day2)
            for i in dict_yesterday_difference:
                object = (dict_yesterday_difference[i]).split(',')
                name =  ((object[0]).split(',')[0])[:-10]+object[1]+'-'+object[2]
                docs = object[4]
                store = object[5]
                print(name + ' docs: +' + str(docs) + ' store: ' + store)
        else:
           print("%s日期下沒有相關日志"%day2)



        # 輸出兩天中后者中有的數(shù)據(jù)而在前者沒有出現(xiàn)排霉,取負值(-)區(qū)別
        print('')
        if len(dict_the_day_before_yesterday) != 0:
            print("++++++++++++++++只有%s有的數(shù)據(jù),都取負值(-)予以區(qū)別++++++++++++++++" % day1)
            for i in dict_the_day_before_yesterday_difference:
                object = (dict_the_day_before_yesterday_difference[i]).split(',')
                name =  ((object[0]).split(',')[0])[:-10]+object[1]+'-'+object[2]
                docs = object[4]
                store = object[5]
                print(name+ ' docs: -' + str(docs) + ' store: -' + store)
        else:
           print("%s日期下沒有相關日志"%day1)

    except:

        print("輸入的參數(shù)可能不對民轴,三個參數(shù)攻柠,地址,day1 day2")


# log_data('/Users/lee/Desktop/py交易/es.log','2017-08-11','2017-08-12')

log_data(sys.argv[1],sys.argv[2],sys.argv[3])

# /Users/lee/Desktop/py交易/test.log


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末后裸,一起剝皮案震驚了整個濱河市瑰钮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌微驶,老刑警劉巖浪谴,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡较店,警方通過查閱死者的電腦和手機士八,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梁呈,“玉大人婚度,你說我怎么就攤上這事」倏ǎ” “怎么了蝗茁?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寻咒。 經(jīng)常有香客問我哮翘,道長,這世上最難降的妖魔是什么毛秘? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任饭寺,我火速辦了婚禮,結果婚禮上叫挟,老公的妹妹穿的比我還像新娘艰匙。我一直安慰自己,他們只是感情好抹恳,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布员凝。 她就那樣靜靜地躺著,像睡著了一般奋献。 火紅的嫁衣襯著肌膚如雪健霹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天瓶蚂,我揣著相機與錄音糖埋,去河邊找鬼。 笑死扬跋,一個胖子當著我的面吹牛阶捆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钦听,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼洒试,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朴上?” 一聲冷哼從身側(cè)響起垒棋,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痪宰,沒想到半個月后叼架,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畔裕,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年乖订,在試婚紗的時候發(fā)現(xiàn)自己被綠了扮饶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡乍构,死狀恐怖甜无,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哥遮,我是刑警寧澤岂丘,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站眠饮,受9級特大地震影響奥帘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仪召,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一寨蹋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧返咱,春花似錦钥庇、人聲如沸牍鞠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽难述。三九已至萤晴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胁后,已是汗流浹背店读。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留攀芯,地道東北人屯断。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像侣诺,于是被迫代替她去往敵國和親殖演。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容