CSV, JSON ja XML käsureal
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
Kiirülevaade
Eesmärk on kiiresti ära tunda andmete kuju ja valida selle järgi järgmine tööriist.
| Vorming või käsk | Milleks | Mida tavaliselt näed |
|---|---|---|
| CSV | lihtne tabel | read ja väljad |
| JSON | objektide ja massiivide puu | taandega struktuur või valitud võtmed |
| XML | märgenditega puu | elemendid ja pesastatud struktuur |
head | vaata faili algust | esimesed read |
column | tee lihtne tabel loetavamaks | joondatud veerud |
python3 -m json.tool, jq | vaata JSON-i | vormindatud või filtreeritud JSON |
xmllint | vorminda XML | loetavam märgendipuu |
Tüüpilised algaja vead
- aetakse segi tabeli, puu ja märgendipõhise struktuuri loogika
- proovitakse keerukat CSV-d töödelda liiga lihtsa eraldajaloogikaga
- eeldatakse, et kõik JSON-failid on ühetaolised lihtsad võtme-väärtuse paarid
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.
Lisalugemine
Selle teema usaldusväärsemad viited leiad lisast Lisa E: usaldusväärsed viited ja lisalugemine.
Peatüki täisspikker
Edasijõudnu
Eesmärk
vormingu tüüp ütleb, milline tööriist mõistab andmeid kõige loomulikumalt: tabelit, puud või märgendistruktuuri.
Põhikujud
head fail.csvvaata CSV algustcolumn -s, -t < fail.csvjoonda lihtne CSVcut -d, -f1 fail.csvvõta üks veergpython3 -m json.tool fail.jsonvorminda JSONjq '.students[].name' fail.jsonvali JSON väljuxmllint --format fail.xmlvorminda XML
Olulised mõisted
CSVlihtne tabelJSONobjektide puuXMLmärgendipuujqJSON filtriks