Datan käsittely
CSV-tiedoston lukeminen
Olemme tähän mennessä käsitelleet CSV-tiedostoja omalla koodilla, mutta tähän on myös valmis moduuli csv, jota voi käyttää näin:
import csv
with open("testi.csv") as tiedosto:
for rivi in csv.reader(tiedosto, delimiter=";"):
print(rivi)
Yllä oleva koodi lukee rivit CSV-tiedostosta testi.csv
, jossa erotinmerkki on ;
. Esimerkiksi jos tiedoston sisältö on
012121212;5
012345678;2
015151515;4
niin koodi antaa seuraavan tuloksen:
['012121212', '5'] ['012345678', '2'] ['015151515', '4']
Mitä hyötyä on käyttää moduulia sen sijaan, että toteuttaa lukemisen itse split
-funktiolla? Yksi hyöty on, että moduulin toteutus toimii myös silloin, kun arvona on merkkijono, jonka sisällä on erotinmerkki. Esimerkiksi jos tiedoston sisältö on
"aaa;bbb";"ccc;ddd"
niin koodin tulos on:
['aaa;bbb', 'ccc;ddd']
Jos vain jakaisimme rivin osiin ;
-merkkien kohdista, lukeminen ei toimisi oikein, koska myös merkkijonot jakaantuisivat.
JSON-tiedoston lukeminen
CSV-muodon lisäksi on olemassa muitakin koneluettavia tiedostomuotoja. Eräs näistä on erityisesti tietojen siirrossa yleisesti käytetty JSON.
JSON-tiedostot ovat tekstitiedostoja, joilla on tietty tarkka muoto. Seuraavassa esimerkkinä JSON-tiedosto kurssit.json
, jossa on tietoa kursseista:
[
{
"nimi": "Ohjelmoinnin perusteet",
"tunnus": "Ohpe",
"periodit": [1, 3]
},
{
"nimi": "Ohjelmoinnin jatkokurssi",
"tunnus": "Ohja",
"periodit": [2, 4]
},
{
"nimi": "Tietokantasovellus",
"tunnus": "Tsoha",
"periodit": [1, 2, 3, 4]
}
]
JSON-tiedostot näyttävät kohtuullisen tutulta Pythonin käyttäjille. Itse asiassa tiedoston sisältö vastaa Pythonin listaa, jonka sisällä on kolme sanakirjaa.
Standardikirjastossa on JSON-tiedostojen käsittelyyn moduuli json. Siinä oleva funktio loads
muuttaa merkkijonona annetun JSON-datan Pythonin tietorakenteiksi. Esimerkiksi koodin
import json
with open("kurssit.json") as tiedosto:
data = tiedosto.read()
kurssit = json.loads(data)
print(kurssit)
tulos on seuraava:
[{'nimi': 'Ohjelmoinnin perusteet', 'tunnus': 'Ohpe', 'periodit': [1, 3]}, {'nimi': 'Ohjelmoinnin jatkokurssi', 'tunnus': 'Ohja', 'periodit': [2, 4]}, {'nimi': 'Tietokantasovellus', 'tunnus': 'Tsoha', 'periodit': [1, 2, 3, 4]}]
Koodia voisi jatkaa vaikka seuraavasti, jolloin koodi tulostaa jokaisen kurssin nimen:
for kurssi in kurssit:
print(kurssi["nimi"])
Ohjelmoinnin perusteet Ohjelmoinnin jatkokurssi Tietokantasovellus
Netissä olevan tiedoston hakeminen
Pythonin standardikirjaston funktion urllib.request.urlopen avulla on helppo hakea internetistä sisältöä ohjelmista käsin.
Esim. seuraava koodi tulostaa Helsingin yliopiston etusivun sisällön:
import urllib.request
pyynto = urllib.request.urlopen("https://helsinki.fi")
print(pyynto.read())
Ihmisille tarkoitetut sivut tosin eivät tulostu kovin selkeinä, mutta internetissä on myös runsaasti koneluettavaa dataa, joka on usein JSON-muodossa.
Moduulien etsiminen
Pythonin dokumentaatiosta löytyy tietoa kaikista standardikirjaston moduuleista:
Standardikirjaston lisäksi verkosta löytyy lukuisia vapaasti käytettäviä kirjastoja eri tarpeisiin. Joitakin yleisesti käytettyjä moduuleja on täällä:
Log in to view the quiz