106 lines
4.1 KiB
Python
106 lines
4.1 KiB
Python
![]() |
#!/usr/bin/python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
from pyiofload import *
|
||
|
import os
|
||
|
|
||
|
source_dir = 'xmls'
|
||
|
|
||
|
|
||
|
def do_merge_races(xmlfile1, xmlfile2, class_remap=None, club_ko=None, fiso_code=0):
|
||
|
race1 = Race()
|
||
|
race2 = Race()
|
||
|
race1.load_from_iofxml(filename_=xmlfile1, class_remap=class_remap, clubs_ko=club_ko, avoid_unk=True)
|
||
|
race2.load_from_iofxml(filename_=xmlfile2, class_remap=class_remap, clubs_ko=club_ko, avoid_unk=True)
|
||
|
# print(race1.name, race1.date)
|
||
|
# print(race2.name, race2.date)
|
||
|
classes1_set = set(race1.classes.keys())
|
||
|
classes2_set = set(race2.classes.keys())
|
||
|
classes_both = classes1_set & classes2_set
|
||
|
# print(len(classes1_set), len(classes2_set), len(classes_both))
|
||
|
# print(classes1_set == classes2_set)
|
||
|
if classes1_set != classes2_set:
|
||
|
raise Exception('Different classes!')
|
||
|
runners1_set = set(race1.runners.keys())
|
||
|
runners2_set = set(race2.runners.keys())
|
||
|
# print(len(runners1_set), runners1_set)
|
||
|
# print(len(runners2_set), runners2_set)
|
||
|
runners_both = runners1_set & runners2_set
|
||
|
# print(len(runners_both))
|
||
|
runners_one_only = runners1_set - runners_both
|
||
|
runners_two_only = runners2_set - runners_both
|
||
|
# print(runners_one_only)
|
||
|
# print(runners_two_only)
|
||
|
|
||
|
for id_to_remove in runners_one_only:
|
||
|
race1.runners.pop(id_to_remove, None)
|
||
|
for id_to_remove in runners_two_only:
|
||
|
race2.runners.pop(id_to_remove, None)
|
||
|
|
||
|
runners1_set = set(race1.runners.keys())
|
||
|
runners2_set = set(race2.runners.keys())
|
||
|
# print(len(runners1_set), runners1_set)
|
||
|
# print(len(runners2_set), runners2_set)
|
||
|
|
||
|
combined_race = Race(fiso_code=fiso_code)
|
||
|
combined_race.name = race1.name + '_' + race2.name
|
||
|
combined_race.date = race2.date
|
||
|
combined_race.classes = race2.classes
|
||
|
combined_race.clubs = {**race1.clubs, **race2.clubs}
|
||
|
|
||
|
combined_runners = {}
|
||
|
for rid in runners_both:
|
||
|
# print(race1.runners[rid])
|
||
|
# print(race2.runners[rid])
|
||
|
runner = Runner(name=race1.runners[rid].name,
|
||
|
family=race1.runners[rid].family,
|
||
|
fisoid=race1.runners[rid].fisoid,
|
||
|
class_=race1.runners[rid].class_,
|
||
|
club=race1.runners[rid].club,
|
||
|
clubid=race1.runners[rid].clubid,
|
||
|
sicard=race1.runners[rid].sicard,
|
||
|
total=race1.runners[rid].time + race2.runners[rid].time
|
||
|
)
|
||
|
combined_runners[rid] = runner
|
||
|
# print(runner)
|
||
|
combined_race.runners = combined_runners
|
||
|
for cid, class_ in combined_race.classes.items():
|
||
|
class_.min = None
|
||
|
class_.max = None
|
||
|
class_.avg = 0.0
|
||
|
class_.tot_t = 0.0
|
||
|
both_runners = [rid for rid in class_.runnersid if rid in combined_race.runners]
|
||
|
# print(both_runners)
|
||
|
both_runners.sort(key=lambda x: combined_race.runners[x].time)
|
||
|
# print(both_runners)
|
||
|
class_.runnersid = both_runners
|
||
|
if both_runners is None:
|
||
|
continue
|
||
|
for rank, rid in enumerate(class_.runnersid):
|
||
|
r = combined_race.runners[rid]
|
||
|
r.place = rank + 1
|
||
|
# print(r)
|
||
|
if class_.min is None or class_.min > r.time:
|
||
|
class_.min = r.time
|
||
|
if class_.max is None or class_.max < r.time:
|
||
|
class_.max = r.time
|
||
|
class_.tot_t += r.time
|
||
|
class_.avg = class_.tot_t / float(len(class_.runnersid))
|
||
|
|
||
|
# print(class_)
|
||
|
return combined_race, race1, race2
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
cf, r1, r2 = do_merge_races(os.path.join(source_dir, 'POC-1_2019109.xml'), os.path.join(source_dir, 'POC-2_2019110.xml'))
|
||
|
for cid, c in cf.classes.items():
|
||
|
print(c.name)
|
||
|
for rid in c.runnersid:
|
||
|
r = cf.runners[rid]
|
||
|
# print(r)
|
||
|
tt = time.strftime('%H:%M:%S', time.gmtime(r.time))
|
||
|
t1 = time.strftime('%H:%M:%S', time.gmtime(r1.runners[rid].time))
|
||
|
t2 = time.strftime('%H:%M:%S', time.gmtime(r2.runners[rid].time))
|
||
|
print('{:2} {:15} {:15} tempo_totale: {} ({} {})'.format(
|
||
|
r.place, r.name, r.family, tt, t1, t2)
|
||
|
)
|