generating an ics file from a tab delimited table
This commit is contained in:
commit
97c23f84bf
2 changed files with 65 additions and 0 deletions
1
README.md
Normal file
1
README.md
Normal file
|
@ -0,0 +1 @@
|
|||
I wanted to generate a big ical file with recurring events for all birthdays in my family from a spreadsheet we put together, so I wrote this script. No python library worked well for this, so I had to generate the ical manually.
|
64
parse.py
Normal file
64
parse.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
import pytz
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
# copied from a spreadsheet (so it's tab separated)
|
||||
bdays = """
|
||||
|
||||
lastname firstname 07-May
|
||||
lastname firstname 07-May
|
||||
lastname firstname 07-May
|
||||
lastname firstname 07-May
|
||||
lastname firstname 07-May
|
||||
lastname firstname 07-May
|
||||
|
||||
|
||||
""".strip().split('\n')
|
||||
|
||||
months = [
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Apr",
|
||||
"May",
|
||||
"Jun",
|
||||
"Jul",
|
||||
"Aug",
|
||||
"Sep",
|
||||
"Oct",
|
||||
"Nov",
|
||||
"Dec"
|
||||
]
|
||||
|
||||
months = {m : i for i, m in enumerate(months)}
|
||||
|
||||
bdays = [[cell.strip() for cell in line.split("\t")] for line in bdays]
|
||||
|
||||
tzname = "Europe/Warsaw"
|
||||
tz = pytz.timezone(tzname)
|
||||
|
||||
|
||||
cal = """
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:Birthdays autogenerated
|
||||
""".strip()
|
||||
|
||||
for sname, fname, bday_date in bdays:
|
||||
event = "BEGIN:VEVENT"
|
||||
day, month = bday_date.split('-')
|
||||
print(f'{sname:<16}|{fname:<16}|{day:>02}.{months[month]+1:>02}')
|
||||
|
||||
event += "\nUID:" + str((fname+sname+bday_date).__hash__())
|
||||
event += "\nDTSTAMP;TZID=" + tzname + ":" + datetime.now(tz=tz).strftime("%Y%m%dT%H%M%S")
|
||||
event += "\nDTSTART;VALUE=DATE:" + f'{datetime.now().year}{months[month]+1:>02}{day:>02}'
|
||||
# event += "\n"
|
||||
event += "\nSUMMARY:" + f'🎂 {fname} {sname} birthday!'
|
||||
event += "\nRRULE:FREQ=YEARLY"
|
||||
event += "\nEND:VEVENT"
|
||||
print(event)
|
||||
cal += "\n" + event
|
||||
|
||||
cal += "\nEND:VCALENDAR"
|
||||
|
||||
with open("birthday_calendar.ical", 'w', encoding='utf-8') as f:
|
||||
f.write(cal)
|
Loading…
Reference in a new issue