Pythonic方式存储和比较csv或xlsx考勤数据

时间:2017-06-22 22:35:54

标签: python excel dictionary

背景

当我在工作中运行报告时,我在.xlsx文件中有以下内容。

A1 - 名字 B1 - 姓氏 C1 - 出席日期

每一行都包含参加我们某个活动的每个人的数据。我正在python中构建一个程序,它将获取一个master.xlsx文件并将其与另一个.xlsx进行比较,并给我以下输出。

  1. .txt文件,其中包含过去两周内没有参加过活动的人。
  2. .txt文件,其中包含过去4周内没有参加过活动的人。
  3. .txt文件,包含未在4周以上参加活动的任何人。
  4. 包含First_Name,Last_Name,Last_Date_Attended
  5. 的新master.xlsx文件

    第二个.xlsx报告每周运行一次,但实际上有一个月的出勤数据。这意味着如果Joe Blow在一个月内出席6次,Joe Blow将在.xlsx文件中返回6行,每行都有一个唯一的日期。所以我将迭代数据,比较日期,只保留最新的数据。

    问题

    我实际上已经完成了上述工作,我的第一个倾向是把它变成字典中的字典。姓氏为关键字的值为' first',' date',' total attend'。总人数计算为for循环的一部分。

    但字典中的字典并不会感觉到pythonic。我觉得我正在围绕一个更简单的解决方案。特别是,一旦我开始编写输出文件。在dict中访问dict的值感觉不对。

    关于更好方法的想法或建议?

    这是我昨晚写的代码示例:

    data = [This is the data from the .xlsx as a list of lists]
    final_data = dict()
    dict_errors = 0
    
    for i in data:
        if i[1] in final_data:
            final_data[i[1]]['total'] = final_data[i[1]]['total'] + 1
            if final_data[i[1]]['date'] < i[2]:
                final_data[i[1]]['date'] = i[2]
            else:
                final_data[i[1]] = {
                    'first': i[0],
                    'date': i[2],
                    'total': 1
                    }
        else:
            dict_errors += 1
    

0 个答案:

没有答案