【问题标题】:How can I build a functioning time recorder (clock-in and clock-out)如何构建功能正常的时间记录器(打卡和打卡)
【发布时间】:2019-07-03 13:44:46
【问题描述】:

我需要一些帮助来编写一个 python 脚本,该脚本将记录我开始工作和打开计算机的时间和日期,以及我关闭它的时间。

到目前为止,我只设法做到了以下几点: - 在一个脚本上,我编写了一个代码来记录我早上到达的时间(以 csv 文件输出) - 在一个单独的脚本上,我复制了相同的代码,但我在晚上运行它(在另一个 csv 文件中输出) - 第三,第三个脚本使用 pandas 库来合并两个文件

  1. 时钟码:

代码:

def clockin():
    import datetime
    import time
    currentDate = datetime.date.today()
    currentTime_in = datetime.datetime.now().time()

    import csv
    with open('Clockin.csv', mode ='a') as Clockin:
        Clockin_writer = csv.writer(Clockin, delimiter = ',', quotechar ='"', quoting = csv.QUOTE_MINIMAL)
        Clockin_writer.writerow([currentDate, currentTime_in])
  1. 打卡代码:

代码:

def clockout():
    import datetime
    import time

    currentDate = datetime.date.today()
    currentTime_out = datetime.datetime.now().time()

    import csv
    with open('Clockout.csv', mode ='a') as Clockout:
        Clockout_writer = csv.writer(Clockout, delimiter = ',', quotechar ='"', quoting = csv.QUOTE_MINIMAL)
        Clockout_writer.writerow([currentDate, currentTime_out])
  1. 合并两个文件:

代码:

def timesheet():
    import pandas as pd

    a = pd.read_csv("Clockin.csv")
    b = pd.read_csv("Clockout.csv")
    merged = a.merge(b)
    merged.to_csv("timesheet.csv", index = False)

【问题讨论】:

  • 请不要使用大写的单词作为变量名。大写的名称是为 Python 中的类名保留的。
  • 另外,导入应该在文件的开头。

标签: python pandas date time


【解决方案1】:

您可能想要编辑您的问题以描述您实际失败的原因。

在不知道这一点的情况下,我看到的一般问题是没有什么可以确保您将正确的超时时间与每个特定的时间相匹配。

听起来您打算手动运行“输入”和“输出”脚本,或者可能从登录和注销事件中触发它们。但是很容易以错过或额外的条目结束:您可能会忘记并打卡两次,或者您可能会进行多次登录(或 shell,如果以这种方式触发),或者您的系统可能会在您执行预期操作之前崩溃时钟'out'。

发生这种情况时,您的两个日志文件将不同步,我很确定普通的 panda 合并(没有 left_on 和 right_on 或“on”参数)只会按顺序配对记录。除非它们完全同步,否则这是行不通的。

更安全的方法是将所有事件写入同一个文件,并添加第三列“IN”或“OUT”。然后当你想合并时,你至少可以保证每个“IN”之后的下一个“OUT”是最好的。通过目视扫描该文件很容易发现错误。程序还可以轻松检查文件是否交替 IN 和 OUT,如果不是,则准确报告问题所在。

我已经为类似的任务做了很长时间了。当我打开和关闭每个 *nix shell 窗口时会触发日志记录,因此我可能一次有多个“in”处于活动状态;但是选择正确的范围仍然很容易——只需从任何 IN 事件运行中获取第一个,以及最近的 OUT 事件运行中的最后一个。

当然,即使那样,您也可以在周一打卡,但不知何故,直到周五您下班时才打卡。使用几乎任何解决方案,这看起来就像您一周每天 24 小时都在工作。如果您担心这种情况,您的合并可能会针对任何看起来太长的轮班发出警告。

希望对您有所帮助。如果不是,请通过准确说明当前问题是什么来澄清问题。

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多