關於日誌數據的分析

以前去面試過,某鵝的最後一道題目,雖然不是特別準確的數據,可是基本都差很少,人家說用awk能夠弄出來,我實在慚愧,結果仍是用了python作,如下給出相關的記錄:python

QQ號       等級    遊戲時間面試

23421421    60       89app

12342432    34       78ide

89348199    45      100遊戲

84193873    55      200ip

32981193    30      20get

84615304    15      30it

91071621    35      70io

23421421    5      500class

23421421    25     22

32981194    90     1000

89348199    50     180

32981193    60     190

32981193    35     25

上面是我虛擬出來的數據,作到的目標數據是:

QQ號    等級     遊戲總時間

xxx     xxxx      xxxx

先說一下,這裏的QQ號有重複,等級也有變化(確定跳等級最高的來記錄),遊戲時間也要總和。

說明一下整體的處理過程:

    一、從文件讀出數據,並生產一個列表,大列表裏面又根據每一行存儲着一個小列表

    二、循環篩選大列表,並準備三個列表,target_list保存篩選出來的單一的qq號並且處理好的等級、遊戲時間的列表,再準備等級列表dengji_list存儲相同QQ號的等級並篩選等級最大的,遊戲時間列表youxishijian_list存儲相同QQ號的遊戲時間並計算出總和,而後再統一添加到target_list中去,再導入到target_target_list中去,最後把target_list、dengji_list、youxishijian_list的數據清空,準備下一個QQ號的數據處理。

如下python代碼:

__author__ = 'samfeng'
def checkio():
    make_list = []      # 讀出文件並要生成的列表
    target_list = []    # 中轉的存儲列表
    dengji_list = []    # 存儲等級的列表
    youxishijian_list = []   # 存儲遊戲等級的列表
    target_target_list = []   # 存儲了QQ號、最大等級、遊戲時間總和的列表
    new_target_list = []      # 去除重複的最終列表
    file_open = open(r"C:\Users\samfeng\Desktop\file.txt")  # 打開文件,r是直接轉換\符號,若是不用要\\這樣
    for eachline in file_open:
        new_eachline = eachline.strip().split(' ')    # 在讀取出來後再去除頭尾空格和換行符,再根據空格符區分數據
        make_list.append(new_eachline)        # 把已經分析出來的添加到make_list中去
    for check_list in make_list:     # 循環make_list的每個列表,以便作比較(1)
        for check_list1 in make_list:  # 再循環make_list(2)
            if check_list1[0] == check_list[0]:  # (1)中的每個列表跟(2)中循環的列比較,這裏比較的是第一項目[0]
                dengji_list.append(check_list1[4])   # 添加等級,等級基本固定在第4個元素,不清楚能夠打印一下make_list看看
                youxishijian_list.append(check_list1[-1]) # 遊戲時間都是最後一個元素,不清楚能夠打印一下make_list看看
        if len(target_list) == 0:   # target_list只是暫時存儲的的列表,在每次存儲完並添加
        #到target_target_list列表中後,就要清空,清空後的長度爲0
            target_list.append(check_list[0])  # 先添加QQ號
            youxishijian_list = map(int, youxishijian_list)  # 因爲一開始的添加的有時間都是字符,要先換成int類型
            target_list.append(max(dengji_list))  # target_list添加最大的等級
            target_list.append(sum(youxishijian_list)) # target_list再添加登記時間和
            if len(target_target_list) == 0:    # 主要是作第一次的判斷,由於第一次的時候t
            #arget_target_list沒有內容
                target_target_list.append(target_list)
            else:
                if target_list[0] not in target_target_list[0]:  # 原本想區分全部的重複的
                #列表首項的QQ號,本覺得python會直接就給我循環了後面才發現每次只是基本就是
                #比較第一項的QQ號,致使後面的添加出來了多項重複的,太坑爹了,不過這樣也好
                #,直接後面清除重複項目
            target_target_list.append(target_list)
            dengji_list = []     # 清空
            youxishijian_list = [] # 清空
            target_list = []  # 清空
    for i in target_target_list:    # 去除重複項目
        if not i in new_target_list:
            new_target_list.append(i)
    print(new_target_list)

if __name__ == "__main__":
    checkio()


基本出來告終果,可是總以爲仍是有些問題的,可是工做也有點忙,沒辦法先記錄一下吧,後面有時間再看看。

相關文章
相關標籤/搜索