【发布时间】:2020-07-16 17:13:51
【问题描述】:
首先,我是 Python 的初学者,这是我第一次为个人项目编写脚本,所以请在回答时保持温和。
输入
我有一个未排序的 CSV 文件,其中包含给定月份所有员工的登录时间,如下所示:
13,03/02/2020 09:43
12,03/02/2020 10:26
10,03/02/2020 12:12
13,03/02/2020 18:22
12,03/02/2020 18:23
13,03/03/2020 09:51
12,03/03/2020 10:38
10,03/03/2020 12:02
13,03/03/2020 18:28
12,03/03/2020 18:29
第一列是员工ID,第二列是登录/注销时间。
我想知道从文件中读取登录时间并计算的最佳/最有效方法:
输出
基本:
1. 员工在办公室呆了多少天
2. 员工每天的总工作时间
Employee ID - xxxx
Date Duration
DD/MM/YY hh:mm:ss
DD/MM/YY hh:mm:ss
DD/MM/YY hh:mm:ss
Total No. of Working Days in this month:
高级:
计算哪些日子是星期日,并将这些日子添加到他们的出席中
更高级:
与某个地区的在线 google 日历进行比较,以查找该地区该月的假期并将这些假期添加到他们的出勤率中
我的逻辑:
- 读取 CSV 文件并提取登录时间并将其保存在排序列表中。这将创建一个列表列表,如下所示:
[['10', '03/02/2020 12:12'],['10', '03/03/2020 12:02'], ['10', '03/06/2020 15:12'], ['10', '03/07/2020 16:18'], ['10', '03/08/2020 11:04'], ['10', '03/08/2020 11:05'], ['10', '03/09/2020 11:27'], ['10', '03/10/2020 17:06'], ['10', '03/11/2020 22:13'], ['10', '03/12/2020 11:13'], ['10', '03/13/2020 11:57'], ['10', '03/14/2020 11:29'], ['10', '03/16/2020 10:32'], ['10', '03/17/2020 17:37'], ['10', '03/18/2020 12:24'], ['10', '03/19/2020 15:38'], ['10', '03/19/2020 15:45'], ['10', '03/20/2020 15:26']]
- 将此列表转换为排序字典,以便将员工的所有登录时间一起保存在列表中。看起来像:
{'10':['03/02/2020 12:12','03/02/2020 15:38','03/08/2020 11:05'],
'12':['03/03/2020 11:27','03/03/2020 12:02','03/03/2020 18:29'],
'13':['03/16/2020 10:32','03/16/2020 11:57','03/16/2020 19:04']}
等等……
...其中,字典的“键”是员工 ID,“值”是按日期排序的所有登录/注销时间列表
对于每个员工ID,对于每一天,使用timedelta函数计算第一次登录时间和最后一次注销时间之间的时间差(肯定会有多个条目) >日期时间模块
创建一个看起来像上面显示的预期输出的 excel 文件
问题
这似乎是一个非常简单明了的任务,然而……
我一直在尝试将列表列表合并到一个正确的字典中,其中员工 ID 作为键,所有登录时间的列表作为值。试图用谷歌搜索一个可能的解决方案让我找到了https://thispointer.com/python-how-to-convert-a-list-to-dictionary/。但这对我的问题没有帮助,因为我试图从同一个列表中提取非常具体的信息。
在 stackoverflow 上找不到类似的东西,所以我发布了一个新问题。
再次重申,我是编程新手,所以请告诉我我解决这个问题的逻辑是否合理,或者我应该尝试不同的方法。
PS:我看过 pandas,但现在似乎没有必要从头开始学习这么简单的任务。
此外,下一步,计算时差可能比我想象的要困难,因此非常欢迎任何帮助。
另外,我不是要求为我编写代码。我想学习这门美丽的语言,这样我就可以变得更好,并轻而易举地创建这样的脚本。
如果您能做到这一点,感谢您抽出宝贵时间!你让世界变得更美好:)
【问题讨论】:
-
可以使用熊猫吗?您可能会查找 set() 和 zip(),它们是列表列表的强大工具
-
您如何区分登录和注销时间,因为您似乎只有一个时间变量。还是同一天最早登录第二次注销?
-
在没有人回答你的问题时我在手机上稍后我会提供一个智能熊猫解决方案
-
嗨萨米尔。您说,“我一直在尝试合并列表列表……”。请在帖子开头显示该代码。对我来说,作为一名读者,最重要的是问题代码。谢谢。
-
如果你提供一个 reallistic 数据集,重现和测试会容易得多。数据集是否也可能包含不一致的值(一天中登录/注销次数奇数),如果发生应该怎么办?
标签: python csv calculation biometrics