CSV, JSON ja XML käsureal
Selles peatükis vaatame kolme väga levinud andmevormingut ja seda, kuidas neid käsureal kiiresti uurida.
Loogika
Need kolm vormingut esindavad sageli kolme eri mõtteviisi:
CSVon tavaliselt lihtne tabelJSONon sageli objektide ja massiivide puuXMLon märgenditega puustruktuur
Kui saad aru, millist kuju andmed võtavad, on palju lihtsam otsustada:
- kas kasutada
cut,columnjasort - kas võtta appi
jq - kas minna SQLite'i või Pythoni peale
Oluline praktiline mõte on:
- käsurida sobib hästi kiireks vaatamiseks
- keerulisema loogika jaoks on sageli parem minna Pythonisse või SQL-i
Kiirspikker
head fail.csvvaata CSV esimesi riducolumn -s, -t < fail.csvkuva lihtne CSV tabelinacut -d, -f1 fail.csvvõta üks CSV veerg lihtsal juhulpython3 -m json.tool fail.jsonkuva JSON loetavaltjq '.voti' fail.jsonvali JSON-ist väljugrep '<tag>' fail.xmlleia XML-ist kiirelt märgendeidxmllint --format fail.xmlvorminda XML loetavaks
Kõige tavalisemad tööriistad
CSV
Lihtsa CSV puhul on väga kasulikud:
headcolumncutsortwc
Tähtis hoiatus:
- päris CSV võib sisaldada jutumärke, komasid välja sees ja reavahetusi
- siis ei pruugi
cut -d,olla enam piisavalt täpne
Seega:
- kiireks vaatamiseks on shell väga hea
- päris keerulise CSV jaoks on parem kasutada Pythonit või spetsiaalset tööriista
JSON
JSON on väga levinud:
- API vastustes
- seadistusfailides
- logides
- veebiteenuste väljundis
Kõige praktilisemad esimesed tööriistad on:
python3 -m json.tooljq
Kui jq puudub, saad JSON-i vähemalt ilusti vaadata python3 -m json.tool käsuga.
XML
XML-i kohtab tänapäeval vähem kui JSON-i, aga ta on endiselt oluline:
- vanemates süsteemides
- teaduslikes andmevahetustes
- mõnes konfiguratsioonis
- dokumentide ja metaandmete juures
Hea algreegel:
grepsobib kiireks piilumiseksxmllintsobib ilusaks vorminduseks- keerulisema XML loogika jaoks on parem kasutada spetsiaalsemaid tööriistu või Pythonit
Näited
Näide: lihtne CSV
cat > tudengid.csv <<'EOF'
name,city,score
Mari,Tartu,91
Jaan,Tallinn,84
Liis,Narva,88
EOF
Vaatame faili:
head -n 4 tudengid.csv
column -s, -t < tudengid.csv
cut -d, -f1 tudengid.csv
Siin:
headnäitab algustcolumnmuudab lihtsa CSV visuaalselt tabelikscut -d, -f1võtab esimese veeru
Näide: lihtne JSON
cat > tudengid.json <<'EOF'
{
"students": [
{"name": "Mari", "city": "Tartu", "score": 91},
{"name": "Jaan", "city": "Tallinn", "score": 84},
{"name": "Liis", "city": "Narva", "score": 88}
]
}
EOF
Vaatame JSON-i:
python3 -m json.tool tudengid.json
jq '.students[].name' tudengid.json
Siin:
python3 -m json.toolteeb JSON-i loetavaksjq '.students[].name'käib massiivi läbi ja võtab nimed
Näide: lihtne XML
cat > tudengid.xml <<'EOF'
<students>
<student city="Tartu">
<name>Mari</name>
<score>91</score>
</student>
<student city="Tallinn">
<name>Jaan</name>
<score>84</score>
</student>
</students>
EOF
Vaatame XML-i:
grep '<name>' tudengid.xml
xmllint --format tudengid.xml
Siin:
grepannab kiire märgendi-põhise piilumisexmllint --formatteeb struktuuri palju loetavamaks
Kui xmllint puudub, siis see ei ole üllatav. Ta ei ole igas süsteemis vaikimisi olemas.
Mida meelde jätta
CSVon kõige lähemal tabelileJSONsobib hästi pesastatud andmeteleXMLon samuti puustruktuur, aga märgenditega- käsurida sobib väga hästi esimeseks vaatamiseks
- keerulisem töö läheb sageli edasi SQLite'i, Pythonisse või mõnda teise tööriista
Minitest
- Loo üks väike
CSVfail kolme reaga ja kuva seecolumnabil tabelina. - Loo üks väike
JSONfail ja kuva sellest ainult nimed. - Loo üks väike
XMLfail ja otsi sellest üks märgendgrepabil. - Selgita ühe lausega, miks
cut -d,ei pruugi alati päris CSV jaoks piisata.