Как я могу построить функционирующий регистратор времени (вход и выход) - PullRequest
0 голосов
/ 03 июля 2019

Мне нужна помощь в написании скрипта на python, который будет записывать время и дату, когда я прихожу на работу и включаю свой компьютер, и время, когда я его выключаю.

Пока мне удалось сделать только следующее: - в одном сценарии я написал код для записи времени прибытия утром (вывод в файл csv) - на отдельном скрипте я скопировал тот же код, но вечером запускаю (вывод в другой CSV-файл) - в-третьих, третий скрипт использует библиотеку панд для объединения в два файла

  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)

1 Ответ

0 голосов
/ 03 июля 2019

Возможно, вы захотите отредактировать свой вопрос, чтобы описать, что на самом деле для вас не получается.

Не зная этого, общая проблема, которую я вижу, состоит в том, что нет ничего, что могло бы гарантировать, что вы подбираете правильное время ожидания для каждогоопределенное время входа.

Звучит так, как будто вы намереваетесь запускать сценарии «in» и «out» вручную или запускать их из событий входа и выхода из системы.Но это очень легко закончить с пропущенными или дополнительными записями: вы можете забыть и дважды включить 'in', или вы можете сделать несколько входов в систему (или оболочек, если инициируете таким образом), или ваша система может произойти сбой, прежде чем вы сможете сделать ожидаемыйclock 'out'.

Когда это произойдет, ваши два файла журнала будут не синхронизированы, и я почти уверен, что простое слияние панды (без параметров left_on и right_on или 'on', просто)пара записывает по порядку.Это не сработает, если они не будут идеально синхронизированы.

Более безопасный способ - записать все события в один и тот же файл, добавив третий столбец с надписью «IN» или «OUT».Затем, когда вы хотите объединить, вы, по крайней мере, гарантируете, что следующий «OUT» после каждого «IN» будет лучшим для использования.Это легко обнаружить ошибки, сканируя этот файл визуально.Программа также может легко проверить, чередует ли файл входы и выходы, и сообщить точно, где проблема, если нет.

Я делал это для аналогичной задачи в течение длительного времени.Ведение журнала запускается, когда я открываю и закрываю каждое окно оболочки * nix, поэтому у меня может быть несколько активных «in» одновременно;но все еще довольно легко выбрать правильный диапазон - просто возьмите первый из любого запуска событий IN и последний из ближайшего следующего запуска событий OUT.

Конечно, даже тогда вы можете включить часы в понедельник и каким-то образом вообще не включить часы до пятницы, когда вы выйдете.Практически любое решение будет выглядеть так, будто вы работали 24 часа в сутки всю неделю.Если вас беспокоит этот случай, ваше слияние может выдать предупреждение для любых рабочих смен, которые кажутся слишком длинными.

Надеюсь, что это поможет.Если нет, уточните вопрос, точно указав текущую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...