feat: move old scripts from my gist to here
This commit is contained in:
101
assets/ics2csv.py
Normal file
101
assets/ics2csv.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import icalendar
|
||||
|
||||
def DumpComponentHeader(file, component):
|
||||
fields = []
|
||||
inclusiveUnitCounter = 0
|
||||
fields += map(lambda x: x + ' - required', component.required)
|
||||
fields += map(lambda x: x + ' - singletons', component.singletons)
|
||||
for units in component.inclusive:
|
||||
fields += map(lambda x: x + ' - inclusive{}'.format(inclusiveUnitCounter), units)
|
||||
inclusiveUnitCounter += 1
|
||||
fields += ('exclusive - name', 'exclusive - data')
|
||||
fields += ('multiple', )
|
||||
file.write(','.join(fields))
|
||||
file.write('\n')
|
||||
|
||||
def DumpComponentData(file, component):
|
||||
data = []
|
||||
gotten_instance = None
|
||||
|
||||
for item in component.required:
|
||||
gotten_instance = component.get(item)
|
||||
if gotten_instance is not None:
|
||||
data.append(AdvancedFormater(gotten_instance))
|
||||
else:
|
||||
data.append('')
|
||||
for item in component.singletons:
|
||||
gotten_instance = component.get(item)
|
||||
if gotten_instance is not None:
|
||||
data.append(AdvancedFormater(gotten_instance))
|
||||
else:
|
||||
data.append('')
|
||||
for units in component.inclusive:
|
||||
for item in units:
|
||||
gotten_instance = component.get(item)
|
||||
if gotten_instance is not None:
|
||||
data.append(AdvancedFormater(gotten_instance))
|
||||
else:
|
||||
data.append('')
|
||||
|
||||
gotten_name = ""
|
||||
gotten_data = ""
|
||||
for item in component.exclusive:
|
||||
gotten_instance = component.get(item)
|
||||
if gotten_instance is not None:
|
||||
gotten_name = item
|
||||
gotten_data = AdvancedFormater(gotten_instance)
|
||||
break
|
||||
data.append(gotten_name)
|
||||
data.append(gotten_data)
|
||||
|
||||
for item in component.multiple:
|
||||
gotten_instance = component.get(item)
|
||||
if gotten_instance is not None:
|
||||
data.append('- {} -'.format(item))
|
||||
data.append(AdvancedFormater(gotten_instance))
|
||||
else:
|
||||
data.append('')
|
||||
|
||||
file.write(','.join(data))
|
||||
file.write('\n')
|
||||
|
||||
def AdvancedFormater(data):
|
||||
if isinstance(data, icalendar.prop.vDDDTypes):
|
||||
return str(data.dt)
|
||||
else:
|
||||
return str(data)
|
||||
|
||||
# read file
|
||||
icsFile = open('test.ics', 'rb')
|
||||
cal = icalendar.Calendar.from_ical(icsFile.read())
|
||||
icsFile.close()
|
||||
|
||||
# analyse file
|
||||
csvEvent = open('event.csv', 'w')
|
||||
csvEventHeader = False
|
||||
csvAlarm = open('alarm.csv', 'w')
|
||||
csvAlarmHeader = False
|
||||
|
||||
eventCount = 0
|
||||
alarmCount = 0
|
||||
miscCount = 0
|
||||
for component in cal.walk():
|
||||
if component.name == 'VEVENT':
|
||||
eventCount += 1
|
||||
if not csvEventHeader:
|
||||
DumpComponentHeader(csvEvent, component)
|
||||
csvEventHeader = True
|
||||
DumpComponentData(csvEvent, component)
|
||||
elif component.name == 'VALARM':
|
||||
alarmCount += 1
|
||||
if not csvAlarmHeader:
|
||||
DumpComponentHeader(csvAlarm, component)
|
||||
csvAlarmHeader = True
|
||||
DumpComponentData(csvAlarm, component)
|
||||
else:
|
||||
miscCount += 1
|
||||
|
||||
|
||||
csvEvent.close()
|
||||
csvAlarm.close()
|
||||
print('Event count: {}\nAlarm count: {}\nMisc count: {}'.format(eventCount, alarmCount, miscCount))
|
||||
Reference in New Issue
Block a user