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 edasi SQLite'i või Pythoni juurde
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 koosnevad lihtsatest ühetaolistest võtme-väärtuse paaridest
Kõige tavalisemad tööriistad
CSV
Lihtsa CSV puhul on väga kasulikud:
headcolumncutsortwc
Tähtis hoiatus:
- CSV võib sisaldada jutumärke, väljade sees komasid ja reavahetusi
- siis ei pruugi
cut -d,olla enam piisavalt täpne
Seega:
- kiireks vaatamiseks on shell väga hea
- keerulise CSV jaoks on parem kasutada Pythonit või selleks mõeldud 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, kuid see 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:
grepvõimaldab kiiresti märgendeid otsidaxmllint --formatteeb struktuuri palju loetavamaks
Kui xmllint puudub, ei ole see üllatav: tööriist ei ole igas süsteemis vaikimisi olemas.
CSV kirje ei pruugi olla üks tekstirida. Jutumärkides välja sees võib olla reavahetus; wc -l loendab reavahetusi, mitte CSV kirjeid. Selliste andmete jaoks kasuta CSV-parserit, mitte cut -d,.
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 keeruka CSV-faili töötlemiseks 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