Skip to content

Instantly share code, notes, and snippets.

@prakhar1989
Created January 6, 2019 15:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prakhar1989/bab6be83e33d94d23cf74296e3f2b1b0 to your computer and use it in GitHub Desktop.
Save prakhar1989/bab6be83e33d94d23cf74296e3f2b1b0 to your computer and use it in GitHub Desktop.
attendance
#!/Users/prsrivastav/miniconda3/bin/python3.7
import csv
from dataclasses import dataclass
from datetime import datetime
from typing import List
DATE_FORMAT = "%d-%m-%Y"
@dataclass
class MasterRow:
""" represents a master row in database """
badge_id: str
date: datetime.date
@dataclass
class AttendanceRow:
""" represents an attendance row in database """
badge_id: str
first_name: str
last_name: str
date_issue: datetime.date
date_returned: datetime.date
def master_rows() -> List[MasterRow]:
rows = [row for row in csv.reader(open("master.csv"))][1:]
return [MasterRow(row[0], to_date(row[1])) for row in rows]
def attendance_rows() -> List[AttendanceRow]:
rows = [row for row in csv.reader(open("attendance.csv"))][1:]
return [
AttendanceRow(row[0], row[1], row[2], to_date(row[3]), to_date(row[4]))
for row in rows
]
def find_matching_attendance(row: MasterRow, attn_rows: List[AttendanceRow]):
date_tagged = row.date
for row in attn_rows:
if (
row.badge_id == row.badge_id
and date_tagged >= row.date_issue
and date_tagged <= row.date_returned
):
return row
return None
def to_date(d: str) -> datetime.date:
return datetime.strptime(d, DATE_FORMAT).date()
def write_csv(filename):
with open(filename, "w") as f:
writer = csv.DictWriter(f, ["badge_id", "date", "first_name", "last_name"])
writer.writeheader()
for row in master_rows():
attendance = find_matching_attendance(row, attendance_rows())
writer.writerow(
{
"badge_id": row.badge_id,
"date": row.date,
"first_name": attendance.first_name,
"last_name": attendance.last_name,
}
)
if __name__ == "__main__":
write_csv("new_master.csv")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment