Lekce 2.3

Datové formáty a scraping

Struktura JSON, XML a CSV a k čemu se který hodí, úskalí CSV, co je scraping a čím se liší od práce s API.

CSV

Třetí formát je ze všech nejjednodušší. CSV (Comma-Separated Values, hodnoty oddělené čárkami) je tabulka zapsaná jako prostý text.

Řádky a oddělovače

csv
code,buy,sell,note
EUR,23.80,24.90,
USD,21.25,22.30,
GBP,28.40,29.85,jen bankovky

Každý řádek souboru je jeden záznam a hodnoty v něm odděluje oddělovač, tady čárka. První řádek obvykle nese hlavičku s názvy sloupců. Prázdná hodnota je prostě nic mezi dvěma oddělovači nebo za posledním z nich.

CSV otevře každý tabulkový procesor a vyexportuje ho každá tabulka i databáze. Proto se hodí na předávání tabulkových dat mezi programy, které o sobě nic nevědí.

Za tu jednoduchost se platí. Z lístku zmizel název směnárny a datum: CSV neumí zanořování, a co se nevejde do řádků a sloupců, musí se opakovat v každém řádku nebo zůstat v názvu souboru. Nezná ani typy, 23.80 je pro něj text stejně jako jen bankovky. A hlavně neexistuje pravidlo, které by všichni dodržovali. Formální popis formátu (RFC 4180) vznikl až dlouho poté, co se CSV začalo používat, a programy se od něj odchylují, jak se jim hodí. Odtud pochází většina potíží, které se s formátem CSV pojí.

Oddělovač

Kolik hodnot má tenhle řádek?

EUR,24,35

Všimněte si, že kdo řádek zapsal, mohl myslet něco jiného, než co z něj přečte program. Program nehádá a rozdělí řádek u každé čárky.

Proto se v zemích s desetinnou čárkou, tedy i u nás, jako oddělovač hodnot často používá středník. Excel v českém nastavení systému ho při otevírání CSV očekává:

csv
code;buy;sell;note
EUR;23,80;24,90;

Třetí běžnou variantou je tabulátor. Takovému souboru se říká TSV (Tab-Separated Values) a jeho výhoda je, že tabulátor se v běžném textu skoro nevyskytuje. A Česká národní banka zveřejňuje denní kurzovní lístek i jako textový soubor se svislítkem a desetinnou čárkou:

05.11.2026 #214
země|měna|množství|kód|kurz
EMU|euro|1|EUR|24,345
Japonsko|jen|100|JPY|13,731

Uvozovky

Co když hodnota sama obsahuje oddělovač?

csv
code,name,country
CHF,švýcarský frank,"Švýcarsko, Lichtenštejnsko"
USD,americký dolar,USA

Hodnota s oddělovačem se dává do dvojitých uvozovek, které říkají: tahle čárka hodnotu neukončuje. A když je uvozovka uvnitř hodnoty, zdvojí se:

csv
code,note
USD,"Se slevovým kódem ""MOST"" bez poplatku"

Hodnota v posledním sloupci zní Se slevovým kódem "MOST" bez poplatku. Takovému ošetření zvláštních znaků se říká escapování. Každý formát ho má po svém, XML třeba přes &.

Víceřádkové hodnoty

csv
code,note
HUF,"Jen bankovky.
Mince nevykupujeme."
EUR,

Zalomení řádku uvnitř uvozovek patří k hodnotě. Soubor má čtyři řádky, ale tabulka jen tři: hlavičku a dva záznamy. Řádek souboru tedy není vždycky řádek tabulky, a program, který CSV čte po řádcích, z takového souboru vyrobí rozsypanou tabulku.

Kódování

CSV nemá prolog jako XML, takže v souboru nikde nestojí, v jakém kódování je uložený, a program ho musí odhadnout. Dnes je běžné UTF-8, starší programy ve Windows ale ukládají češtinu v kódování Windows-1250. Když se program netrefí, vypadá to takhle:

Soubor v UTF-8 přečtený jako Windows-1250:

Směnárna U Mostu;koruna česká

Soubor ve Windows-1250 přečtený jako UTF-8:

Sm�n�rna U Mostu;koruna �esk�

Text v souboru je v pořádku, jen ho program přečetl podle špatné tabulky znaků. Pomůže otevřít soubor znovu a kódování zvolit ručně. Některé programy píšou na začátek souboru v UTF-8 neviditelnou značku BOM (byte order mark), podle které ostatní kódování poznají; kdo ji nezná, ukáže ji jako podivné znaky před první hodnotou.

Přehled úskalí

Úskalí Jak se pozná Jak se řeší
oddělovač čárka, středník, tabulátor, svislítko zjistit z prvního řádku a při otevírání zvolit
desetinná čárka 24,35 v souboru s oddělovačem čárkou středník jako oddělovač, nebo hodnota v uvozovkách
oddělovač v hodnotě "Švýcarsko, Lichtenštejnsko" hodnota v uvozovkách
uvozovka v hodnotě ""MOST"" zdvojená uvozovka
víceřádková hodnota zalomení uvnitř uvozovek číst soubor jako CSV, ne po řádcích
kódování SmÄ›nárna otevřít znovu s jiným kódováním
Tip

Když chcete vědět, co v CSV opravdu je, neotvírejte ho dvojklikem v tabulkovém procesoru. Ten soubor rovnou rozdělí do buněk, uvozovky schová a čísla si přeloží po svém. Otevřete ho v textovém editoru, na Windows v Poznámkovém bloku, na Linuxu v Textovém editoru, na Macu v TextEditu nebo kdekoli ve VS Code, a uvidíte každou čárku i uvozovku. Jak taková data vyčistit a správně naimportovat do Excelu, si ukážeme v lekci o čištění dat.