Používám programovací jazyk Python už asi 15 let, ale faktem je, že v něm dnes spíš jen skriptuju, než abych tvořil větší projekty. Ale čím déle ho používám, tím víc jsem okouzlen tím, jakou sílu vyjadřování mi vlastně nabízí. Problém je jen dokázat to srozumitelně prezentovat začátečníkům nebo nepythonistům...
Samozřejmě, že na import csv existuje knihovna a před lety bych se asi prostě podíval na její dokumentaci. Ale neexistuje jednodušší cesta? Nedávno se mi podařilo konvertovat textový konfigurační soubor na pythoní pole onelinerem, tak jsem se zamyslel i nad importem csv. A onelinery mi vznikly dva. Mějme test.csv, který vytvoříme pomocí "Uložit jako" v LibreOffice nebo Excellu:
"x",1
"y",2
Načtení do dvourozměrného pole stringů je triviální, jak jistě uznáte:
>>> csv = [radek.replace("\n",'').split(',') for radek in open('test.csv')]
>>> csv
[['"x"', '1'], ['"y"', '2']]
Jenže provádět nad stringy nějaké tabulkové výpočty není moc praktické, navíc stringy poznáme podle toho, že byly exportovány do úvozovek. Proto potřebujeme ještě:
>>> csv = [[int(sloupec) if sloupec.isnumeric() else sloupec[1:-1] for sloupec in radek] for radek in csv]
>>> csv
[['x', 1], ['y', 2]]
Nyní můžeme nad csv souborem importovaným do pole už pohodlně provádět jakékoliv výpočty, jako by šlo o spreadsheet, např.:
>>> sum([x[1] for x in csv])
3
Jsem si poměrně jistý, že někdo mi tady ukáže, jak ty dva onelinery sloučit :-) nemluvě o tom, že kromě integerů existují i floaty... ale uznejte, že je to hezké...
Vnořování konstruktorů pole trochu zavání polskou notací ;-) ale u mě s rostoucím věkem klesá schopnost zapamatovat si nebo zanalyzovat funkčnost delších bloků kódu a přestalo mi taky bavit vymýšlet si názvy dočasných proměnných, takže začínám logicky tíhnout k onelinerům, protože zaberou v mojí děravé hlavě míň místa...
Pokud vás to nezajímá, omlouvám se, ale pro mě je to něco jako fotka kočky :-)
#pythoncz #pyvo #oneliner