#!/usr/bin/env python2.7 # This code is written by Stephen C Phillips. # It is in the public domain, so you can do what you like with it # but a link to http://scphillips.com would be nice. from datetime import date as ddate class Holiday: def __init__(self, date, country): d = ddate(int(date[:4]), int(date[4:6]), int(date[6:]) ) self.date = d self.country = country def __str__(self): return self.country + ': ' + str(self.date) def _get_day(self): # Monday is 0, Sunday is 6 return self.date.weekday() day = property(_get_day) #http://euroalert.net/dl/docs/open-data/euroalert-Public-Holidays-EU-2012.ics cal_file = file('c:/tmp/euroalert-Public-Holidays-EU-2012.ics') holidays = [] ignore_weekends = 1 for line in cal_file: line = line[:-1] if line.startswith('DTSTART'): date = line[-8:] if line.startswith('SUMMARY'): country = line[8:] if '/' in country: country = country[:country.index('/')] hol = Holiday(date, country) if ignore_weekends and hol.day >= 5: pass else: holidays.append(hol) holidays_by_country = {} for h in holidays: holidays_by_country.setdefault(h.country, []) holidays_by_country[h.country].append(h) countries = holidays_by_country.keys() countries_by_holidays = {} for c, h in holidays_by_country.items(): num = len(h) countries_by_holidays.setdefault(num, []) countries_by_holidays[num].append(c) print "*** LEADERBOARD ***" for n in sorted(countries_by_holidays.keys(), reverse=True): print n, ':', countries_by_holidays[n] print "*******************" def get_days(countries): "Return the number of times not all partners will be on a call for each day of the week." holidays_by_date = {} for c in countries: for h in holidays_by_country[c]: holidays_by_date.setdefault(h.date, []) holidays_by_date[h.date].append(h) dates = holidays_by_date.keys() days = [0,0,0,0,0,0,0] for date in dates: day = date.weekday() #days[day] += len(holidays_by_date[date]) # this would tell you how many partners would be missing in total days[day] += 1 # this is how many times not all partners are present return days project_countries = ['Austria', 'Belgium', 'France', 'Greece', 'Spain', 'Sweden', 'Wales and England'] days = get_days(project_countries) print print project_countries print days