def parse_infantil_data(filename, orrialdea, kategoria): df = read_pdf(filename, pages=orrialdea, stream=True) cols = read_columns(df[0]) df[0].columns = cols sailkapena = df[0][df[0][cols[0]].notna()].iloc[1:] talde_emaitzak = [] for i, r in sailkapena.iterrows(): (posizioa, _, tanda) = r['Puesto Tanda'].partition('o') (kalea, _, taldea) = r['Baliza Club'].partition(' ') ziab1 = None if 'Ciaboga 1' in cols: ziab1 = r['Ciaboga 1'] if 'Ciaboga 1 Final' in cols: (ziab1, _, denbora) = r['Ciaboga 1 Final'].partition(' ') if 'Final' in cols: denbora = r['Final'] emaitza = { 'tanda': int(tanda), 'tanda_postua': int(posizioa), 'kalea': int(kalea), 'posizioa': int(posizioa), 'kategoria': kategoria, 'denbora': denbora, 'puntuazioa': len(sailkapena) - int(posizioa) + 1 } t = TaldeEmaitza(taldea, **emaitza) if pd.notna(ziab1): t.ziaboga_gehitu(ziab1) talde_emaitzak.append(t) return talde_emaitzak
def parse_df(df): e = { 'izena': 'Gipuzkoako traineru txapelketa', 'data': '2020-07-15 18:00', 'lekua': 'Orio' } estropada = Estropada(**e) for i, r in df.iterrows(): # tanda = int(tanda) if not isinstance(r['Postua'], type('str')): break tanda = 1 kalea = int(r['Kalea']) postua = int(r['Postua'][:-1]) denbora = r['Denbora'] taldea = r['TALDEA'] ziabogak = [r['1, Ziabo']] if '2, Ziabo' in df.columns: ziabogak.extend([r['2, Ziabo'], r['3, Ziabo']]) emaitza = { 'tanda': tanda, 'tanda_postua': postua, 'kalea': int(kalea), 'posizioa': postua, 'denbora': denbora, 'puntuazioa': postua, 'ziabogak': ziabogak } t = TaldeEmaitza(taldea, **emaitza) estropada.taldeak_add(t) return estropada
def parse_tandas(self, document): numberOfHeats = document.find_class('tabla_tanda') for num, heat in enumerate(numberOfHeats): results = heat.findall('.//tbody//tr') for result in results: resultData = [x.text for x in result.findall('.//td')] if resultData[1] is not None: teamName = resultData[1].strip() # ziabogak = map(lambda s: s or '', resultData[2:5]) ziabogak = [ result if result is not None else '' for result in resultData[2:5] ] if resultData[5] is None: denbora = '' else: denbora = resultData[5] teamResult = TaldeEmaitza(talde_izena=teamName, kalea=int(resultData[0]), ziabogak=ziabogak, denbora=denbora, tanda=num + 1, tanda_postua=int(resultData[6]), posizioa=0) self.estropada.taldeak_add(teamResult)
def parse_tandas(self, document, urtea): tandas = document.cssselect('table.resultados') for num, text in enumerate(tandas): rows = text.findall('.//tr') for kalea, row in enumerate(rows): if kalea == 0: continue data = [x.text for x in row.findall('.//td')] try: if not data[1] is None: if urtea < 2008: pos = 12 aux = re.sub('[^0-9]', '', data[6]) try: pos = int(aux) except ValueError: pos = 12 else: pos = 0 emaitza = TaldeEmaitza(talde_izena=data[1], kalea=kalea, ziabogak=data[2:5], denbora=data[5], tanda=num + 1, posizioa=pos, tanda_postua=4) self.estropada.taldeak_add(emaitza) except TypeError as e: print(e)
def parse_tandas(self, document): tandas = document.cssselect('table.tanda') for num, text in enumerate(tandas): rows = text.findall('.//tbody//tr') for kalea, row in enumerate(rows): data = [x.text for x in row.findall('.//td')] taldea = row.find('.//span//a') emaitza = TaldeEmaitza(talde_izena=taldea.text.strip(), kalea=kalea + 1, ziabogak=data[1:4], denbora=data[4], tanda=num + 1) self.estropada.taldeak_add(emaitza)
def test_estropada_with_sailkapena_with_team_emaitza_objects(): izena = 'Test estropada' props = { 'sailkapena': [ TaldeEmaitza('Hondarribia', **{ 'kalea': 1, 'tanda': 1 }), TaldeEmaitza('Urdaibai', **{ 'kalea': 2, 'tanda': 1 }) ] } e = Estropada(izena, **props) assert type(e) == Estropada assert e.izena == izena assert len(e.sailkapena) == 2 assert type(e.sailkapena[0]) == TaldeEmaitza assert e.sailkapena[0].talde_izena == 'Hondarribia' assert e.sailkapena[1].talde_izena == 'Urdaibai'
def parse_kadete_data(filename, orrialdea, kategoria): df = read_pdf(filename, pages=orrialdea, stream=True) cols = read_columns(df[0]) df[0].columns = cols sailkapena = df[0][df[0][cols[0]].notna()].iloc[1:] talde_emaitzak = [] for i, r in sailkapena.iterrows(): (posizioa, _, tanda) = r['Puesto Tanda'].partition('o') (kalea, _, taldea) = r['Baliza Club'].partition(' ') if 'Ciaboga 1' in cols: ziab1 = r['Ciaboga 1'] if 'Ciaboga 1 Ciaboga 2 Final' in cols: denborak = str(r['Ciaboga 1 Ciaboga 2 Final']).split(' ') if len(denborak) < 3: ziab1 = '' ziab2 = '' denbora = denborak[0] else: (ziab1, ziab2, denbora) = denborak if 'Ciaboga 2 Final' in cols: (ziab2, _, denbora) = str(r['Ciaboga 2 Final']).partition(' ') tanda = int(tanda) kalea = int(kalea) emaitza = { 'tanda': tanda, 'tanda_postua': int(posizioa), 'kalea': int(kalea), 'posizioa': int(posizioa), 'kategoria': kategoria, 'denbora': denbora, 'puntuazioa': len(sailkapena) - int(posizioa) + 1 } t = TaldeEmaitza(taldea, **emaitza) t.ziaboga_gehitu(ziab1) t.ziaboga_gehitu(ziab2) talde_emaitzak.append(t) return talde_emaitzak
def parse_tandas(self, document): '''Parse race's paces tables''' tandas = document.find_class('tabla_tanda') for num, text in enumerate(tandas): rows = text.findall('.//tbody//tr') for row in rows: data = [x.text for x in row.findall('.//td')] kalea = int(data[0]) if data[1]: emaitza = TaldeEmaitza(talde_izena=data[1].strip(), kalea=kalea, ziabogak=data[2:5], denbora=data[5], tanda=num + 1, tanda_postua=int(data[6]), posizioa=0) self.estropada.taldeak_add(emaitza)
def parse_senior_data(filename, orrialdea, kategoria): df = read_pdf(filename, pages=orrialdea, stream=True) cols = read_columns(df[0]) df[0].columns = cols sailkapena = df[0].iloc[1::2] talde_emaitzak = [] for i, r in sailkapena.iterrows(): (posizioa, _, tanda) = r['Puesto Tanda'].partition('o') (kalea, _, taldea) = r['Baliza Club'].partition(' ') if 'Ciaboga 1' in cols: ziab1 = r['Ciaboga 1'] if 'Ciaboga 2' in cols: ziab2 = r['Ciaboga 2'] if 'Ciaboga 1 Ciaboga 2' in cols: (ziab1, _, ziab2) = r['Ciaboga 1 Ciaboga 2'].partition(' ') if 'Ciaboga 2 Ciaboga 3' in cols: (ziab2, _, ziab3) = r['Ciaboga 2 Ciaboga 3'].partition(' ') if 'Ciaboga 3 Final' in cols: (ziab3, _, denbora) = str(r['Ciaboga 3 Final']).partition(' ') if 'Final' in cols: denbora = r['Final'] tanda = int(tanda) kalea = int(kalea) emaitza = { 'tanda': tanda, 'tanda_postua': int(posizioa), 'kalea': int(kalea), 'posizioa': int(posizioa), 'kategoria': kategoria, 'denbora': denbora, 'puntuazioa': len(sailkapena) - int(posizioa) + 1 } t = TaldeEmaitza(taldea, **emaitza) t.ziaboga_gehitu(ziab1) t.ziaboga_gehitu(ziab2) t.ziaboga_gehitu(ziab3) talde_emaitzak.append(t) return talde_emaitzak
def test_talde_emaitza(): izena = 'Donostiarra' te = TaldeEmaitza(izena) assert type(te) == TaldeEmaitza assert te.talde_izena == izena
import pytest from estropadakparser.estropada.estropada import TaldeEmaitza def test_talde_emaitza(): izena = 'Donostiarra' te = TaldeEmaitza(izena) assert type(te) == TaldeEmaitza assert te.talde_izena == izena @pytest.mark.parametrize("test_input,expected", [ (TaldeEmaitza('Donostiarra'), '{:30}'.format('Donostiarra')), (TaldeEmaitza('Donostiarra', **{'tanda': 1, 'kalea': 1}), '{:1}{:1}{:30}'.format(1, 1, 'Donostiarra')), (TaldeEmaitza('Donostiarra', **{'posizioa': 1, 'tanda': 1, 'kalea': 1}), '[{:2}]{:1}{:1}{:30}'.format(1, 1, 1, 'Donostiarra')), (TaldeEmaitza('Donostiarra', **{'posizioa': 1, 'tanda': 1, 'kalea': 1, 'ziabogak': ['04:50', '09:50', '14:50']}), '[{:2}]{:1}{:1}{:30}{:25}'.format(1, 1, 1, 'Donostiarra', ' '.join(['04:50', '09:50', '14:50']))), (TaldeEmaitza('Donostiarra', **{ 'posizioa': 1, 'tanda': 1, 'kalea': 1, 'ziabogak': ['04:50', '09:50', '14:50'], 'tanda_postua': 1, 'denbora': '20:00.00' }), '[{:2}]{:1}{:1}{:1}{:30}{:25}{:8}'.format(1, 1, 1, 1, 'Donostiarra', ' '.join(['04:50', '09:50', '14:50']), '20:00.00')), ]) def test_print_talde_emaitza(test_input, expected):
def parse_data(sailkapena): # cols = sailkapena.columns # read_pdf(filename, pages=orrialdea, stream=True) cols = read_columns(sailkapena) sailkapena.columns = cols # sailkapena = df[0][df[0][cols[0]].notna()].iloc[1:] tanda = 0 kalea = 1 talde_emaitzak = [] ziab1 = None ziab2 = None ziab3 = None for i, r in sailkapena.iterrows(): if not isinstance(r['Puesto Tanda Baliza'], type('str')): continue if i == 0: continue if 'Puesto Tanda Baliza Club' in cols: (posizioa, _, rest) = str(r['Puesto Tanda Baliza Club']).partition('o') (tanda, _, rest) = rest.lstrip().partition(' ') (kalea, _, taldea) = rest.lstrip().partition(' ') if 'Puesto Tanda Baliza' in cols: (posizioa, _, rest) = str(r['Puesto Tanda Baliza']).partition('o') (tanda, _, kalea) = rest.lstrip().partition(' ') if 'Club' in cols: taldea = str(r['Club']).strip() if 'Puesto Tanda' in cols: (posizioa, _, tanda) = r['Puesto Tanda'].partition('o') if 'Baliza Club' in cols: (kalea, _, taldea) = r['Baliza Club'].partition(' ') if 'Ciaboga 1' in cols: ziab1 = r['Ciaboga 1'] if 'Ciaboga 1 Final' in cols: (ziab1, _, denbora) = r['Ciaboga 1 Final'].partition(' ') if 'Ciaboga 1 Ciaboga 2' in cols: (ziab1, _, ziab2) = r['Ciaboga 1 Ciaboga 2'].partition(' ') if 'Ciaboga 1 Ciaboga 2 Final' in cols: denborak = str(r['Ciaboga 1 Ciaboga 2 Final']).split(' ') if len(denborak) < 3: ziab1 = '' ziab2 = '' denbora = denborak[0] else: (ziab1, ziab2, denbora) = denborak if 'Ciaboga 2' in cols: ziab2 = r['Ciaboga 2'] if 'Ciaboga 2 Final' in cols: (ziab2, _, denbora) = str(r['Ciaboga 2 Final']).partition(' ') if 'Ciaboga 2 Ciaboga 3' in cols: (ziab2, _, ziab3) = r['Ciaboga 2 Ciaboga 3'].partition(' ') if 'Ciaboga 3 Final' in cols: (ziab3, _, denbora) = str(r['Ciaboga 3 Final']).partition(' ') if 'Final' in cols: denbora = r['Final'] if pd.isna(denbora) and ziab1: (ziab1, _, denbora) = ziab1.partition(' ') tanda = int(tanda) kalea = int(kalea) emaitza = { 'tanda': tanda, 'tanda_postua': int(posizioa), 'kalea': int(kalea), 'posizioa': int(posizioa), 'denbora': denbora, 'puntuazioa': 0 } t = TaldeEmaitza(taldea, **emaitza) if ziab1 and pd.notna(ziab1): t.ziaboga_gehitu(ziab1) if ziab2 and pd.notna(ziab2): t.ziaboga_gehitu(ziab2) if ziab3 and pd.notna(ziab3): t.ziaboga_gehitu(ziab3) talde_emaitzak.append(t) return talde_emaitzak
kategoria_base = None kategoriak_helper = [] for row in teamreader: posizioa = None try: posizioa = int(row[1]) except ValueError as e: continue if posizioa == 1: kategoria_base = kategoriak[tanda] tanda = tanda + 1 kategoria = kategoria_base + ' ' + row[3] kategoriak_helper.append(kategoria) emaitza = {'tanda': tanda, 'tanda_postua': posizioa, 'kalea': 1, 'posizioa': posizioa, 'kategoria': kategoria, 'denbora': row[8], 'puntuazioa': row[10]} t = TaldeEmaitza(row[2], **emaitza) t.ziaboga_gehitu(row[5]) estropada.taldeak_add(t) estropada.kategoriak = list(set(kategoriak_helper)) print(estropada.get_json()) estropada_json = estropada.get_json() estropada_obj = json.loads(estropada_json) estropada_obj['_rev'] = estropada._rev db[estropada.id] = estropada_obj
kategoriak_helper = [] for row in teamreader: print(row) # if row[0].startswith('#'): # continue posizioa = None try: tanda = int(row[0]) tanda_posizioa = int(row[1]) posizioa = int(row[2]) kalea = int(row[5]) except ValueError as e: continue emaitza = { 'tanda': tanda, 'tanda_postua': tanda_posizioa, 'kalea': kalea, 'posizioa': posizioa, 'denbora': row[8], 'puntuazioa': 0 } t = TaldeEmaitza(row[3], **emaitza) t.ziaboga_gehitu(row[6]) estropada.taldeak_add(t) print(estropada.get_json()) estropada_json = estropada.get_json() estropada_obj = json.loads(estropada_json) # estropada_obj['_rev'] = estropada._rev db[id] = estropada_obj
continue kategoria = kategoria_base kategoriak_helper.append(kategoria) denbora = row[5] if kategoria_base == 'SG' and count < 2: puntuazioa = 0 else: if posizioa == 1: puntuazioa = row[6] else: puntuazioa = row[7] emaitza = { 'tanda': tanda, 'tanda_postua': posizioa, 'kalea': kalea, 'posizioa': posizioa, 'kategoria': kategoria, 'denbora': denbora, 'puntuazioa': int(puntuazioa) } t = TaldeEmaitza(row[1], **emaitza) t.ziaboga_gehitu(row[4]) # if row[13] != '': # t.ziaboga_gehitu(row[13]) # if row[15] != '': # t.ziaboga_gehitu(row[15]) estropada.taldeak_add(t) estropada.kategoriak = list(set(kategoriak_helper)) print(estropada.get_json())
def parse_data(orrialdea, kategoria, data): sailkapena = pd.read_csv(f'./data/btl/{data}/{kategoria}_{orrialdea}.csv') cols = sailkapena.columns tanda = 0 talde_emaitzak = [] ziab1 = None ziab2 = None ziab3 = None denbora = '' for i, r in sailkapena.iterrows(): if 'Puesto Tanda Baliza Club' in cols: (posizioa, _, rest) = str(r['Puesto Tanda Baliza Club']).partition('o') (tanda, _, rest) = rest.lstrip().partition(' ') (kalea, _, taldea) = rest.lstrip().partition(' ') if 'Puesto Tanda Baliza' in cols: (posizioa, _, rest) = str(r['Puesto Tanda Baliza']).partition('o') (tanda, _, kalea) = rest.lstrip().partition(' ') if 'Club' in cols: taldea = str(r['Club']).strip() if 'Puesto Tanda' in cols: (posizioa, _, tanda) = r['Puesto Tanda'].partition('o') if 'Baliza Club' in cols: (kalea, _, taldea) = r['Baliza Club'].partition(' ') if 'Ciaboga 1' in cols: ziab1 = r['Ciaboga 1'] if 'Ciaboga 1 Final' in cols: (ziab1, _, denbora) = r['Ciaboga 1 Final'].partition(' ') if 'Ciaboga 1 Ciaboga 2' in cols: (ziab1, _, ziab2) = r['Ciaboga 1 Ciaboga 2'].partition(' ') if 'Ciaboga 1 Ciaboga 2 Final' in cols: denborak = str(r['Ciaboga 1 Ciaboga 2 Final']).split(' ') if len(denborak) < 3: ziab1 = '' ziab2 = '' denbora = denborak[0] else: (ziab1, ziab2, denbora) = denborak if 'Ciaboga 1 Ciaboga 2 Ciaboga 3 Final' in cols: denborak = str(r['Ciaboga 1 Ciaboga 2 Ciaboga 3 Final']).split(' ') if len(denborak) < 3: ziab1 = '' ziab2 = '' ziab3 = '' denbora = denborak[0] else: (ziab1, ziab2, ziab3, denbora) = denborak if 'Ciaboga 2' in cols: ziab2 = r['Ciaboga 2'] if 'Ciaboga 2 Final' in cols: (ziab2, _, denbora) = str(r['Ciaboga 2 Final']).partition(' ') if 'Ciaboga 2 Ciaboga 3' in cols: (ziab2, _, ziab3) = r['Ciaboga 2 Ciaboga 3'].partition(' ') if 'Ciaboga 3 Final' in cols: (ziab3, _, denbora) = str(r['Ciaboga 3 Final']).partition(' ') if 'Final' in cols: denbora = r['Final'] if pd.isna(denbora) and ziab1: (ziab1, _, denbora) = ziab1.partition(' ') tanda = int(tanda) kalea = int(kalea) emaitza = { 'tanda': tanda, 'tanda_postua': int(posizioa), 'kalea': int(kalea), 'posizioa': int(posizioa), 'kategoria': kategoria, 'denbora': denbora, 'puntuazioa': 0 } t = TaldeEmaitza(taldea, **emaitza) if ziab1 and pd.notna(ziab1): t.ziaboga_gehitu(ziab1) if ziab2 and pd.notna(ziab2): t.ziaboga_gehitu(ziab2) if ziab3 and pd.notna(ziab3): t.ziaboga_gehitu(ziab3) talde_emaitzak.append(t) return talde_emaitzak