关于日志数据的分析

以前去面试过,某鹅的最后一道题目,虽然不是特别准确的数据,可是基本都差很少,人家说用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()


基本出来告终果,可是总以为仍是有些问题的,可是工做也有点忙,没办法先记录一下吧,后面有时间再看看。

相关文章
相关标签/搜索