【发布时间】:2022-01-11 03:39:59
【问题描述】:
使用python程序,我将一个ics文件保存到一个json文件中。json文件包含日历信息。我的目的是用不同的字符串(关键字)替换一些特定的字符串(小时)。基本上是 8:00 到 Meeting1 ; 9:00 到会议 2,以此类推。
Json 内容看起来像这样11/18/21 09:00 UTC-12/19/25 09:45 UTC Meeting-boss: - None。这由 python 程序完成可能会很痛苦,所以我必须使用它。这是将 ics 文件解析为 json 文件的 python 程序:
from datetime import datetime, timedelta, timezone
import icalendar
from dateutil.rrule import *
f = open('myschool.json', 'w')
def parse_recurrences(recur_rule, start, exclusions):
""" Find all reoccuring events """
rules = rruleset()
first_rule = rrulestr(recur_rule, dtstart=start)
rules.rrule(first_rule)
if not isinstance(exclusions, list):
exclusions = [exclusions]
for xdate in exclusions:
try:
rules.exdate(xdate.dts[0].dt)
except AttributeError:
pass
now = datetime.now(timezone.utc)
this_year = now + timedelta(days=60)
dates = []
for rule in rules.between(now, this_year):
dates.append(rule.strftime("%D %H:%M UTC "))
return dates
icalfile = open('myschool.ics', 'rb')
gcal = icalendar.Calendar.from_ical(icalfile.read())
for component in gcal.walk():
if component.name == "VEVENT":
summary = component.get('summary')
description = component.get('description')
location = component.get('location')
startdt = component.get('dtstart').dt
enddt = component.get('dtend').dt
exdate = component.get('exdate')
if component.get('rrule'):
reoccur = component.get('rrule').to_ical().decode('utf-8')
for item in parse_recurrences(reoccur, startdt, exdate):
print("{0} {1}: {2} - {3}\n".format(item, summary, description, location), file = f)
else:
print("{0}-{1} {2}: {3} - {4}\n".format(startdt.strftime("%D %H:%M UTC"), enddt.strftime("%D %H:%M UTC"), summary, description, location), file = f)
icalfile.close()
我不知道该怎么做。如果它使事情变得更容易顺便说一句,json 可能是一个 txt 文件。 感谢所有帮助:)
【问题讨论】:
标签: python json string parsing