Tiedostojen käsittely
461 531 626
Pythonilla (kuten useimmilla muillakin ohjelmointikielillä) voidaan käsitellä tiedostoja. Tiedosto avataan ennen kuin se voidaan lukea tai kirjoittaa. Tiedosto voidaan tuhota avaamatta sitä ensin.
Tiedosto avataan open()-funktiolla:
open(file, 'm', [...])
jossa
open()-funktio avaa tiedoston ja palauttaa ns. tiedostokahvan (file handle) eli viittauksen avattuun tiedostoon. Tiedostokahva talletetaan yleensä muuttujaan, jota käytetään tiedostoa käsitellessä.
Kun tiedostoa ei enää tarvitse käsitellä, se pitää sulkea close()-funktiolla.
Tiedoston sisältö saadaan luettua read()-funktiolla.
datafile = open("crash_catalonia.csv") # Avataan tekstitiedosto crash_catalonia.csv print(datafile.read()) # Tulostetaan tiedoston sisältö näytölle datafile.close() # Suljetaan tiedostoTulostaa: 'Day of Week', 'Number of Crashes' 'Sunday', 13664' 'Monday', 17279' 'Tuesday', 17337' 'Wednesday', 17394' 'Thursday', 17954' 'Friday', 19147' 'Saturday', 15714'
Pythonissa on oma kirjastonsa csv-tiedostojen käsittelyyn. Kirjasto otetaan käyttöön käskyllä import.
import csv
csv-kirjastossa on useita metodeja, joista reader() lukee avatun csv-tiedoston.
import csv datatiedosto = open("crash_catalonia.csv") # Avataan tekstitiedosto crash_catalonia.csv data = csv.reader(datatiedosto) # Luetaan tiedoston sisältö csv-muotoisena for rivi in data: # Käydään yksitellen läpi csv-tiedoston rivit print(rivi) # Tulostetaan kukin rivi näytölle datatiedosto.close() # Suljetaan tiedostoTulostaa: ['Day of Week', 'Number of Crashes'] ['Sunday', '13664'] ['Monday', '17279'] ['Tuesday', '17337'] ['Wednesday', '17394'] ['Thursday', '17954'] ['Friday', '19147'] ['Saturday', '15714']
import csv datatiedosto = open("csv\crash_catalonia.csv") datarivit = csv.reader(datatiedosto) for datarivi in datarivit: # Käydään läpi kaikki rivit print(datarivi[1]) # Tulostetaan kunkin rivin listan toinen jäsen -
# ensimmäinen tulostuisi indeksillä 0
import csv datafile = open("csv\crash_catalonia.csv") datarivit = csv.reader(datafile) for datarivi in datarivit: try: # Kokeillaan, josko onnistuisi hakea numero print(datarivi[1]) # toisesta sarakkeesta (eli indeksin arvolla 1) # Jos numeron haussa tulee ongelmia, hypätään # ongelman mukaiseen except-kohtaan except IndexError: # Tyhjällä rivillä tulee ongelmia indeksin print("Indeksiongelma!") # kanssa, joten tulostetaan ongelmasta continue # tieto ja jatketaan for-luuppia except ValueError: # Otsikkorivillä tulee ongelmia, kun print("Numero-ongelma!") # riviltä ei löydykään numeroita. Tulostetaan continue # ongelmasta tieto ja jatketaan for-luuppia
import csv datatiedosto = open("csv\crash_catalonia.csv") datarivit = csv.reader(datatiedosto) rivi = 1 # Perustetaan rivilaskuri ja asetetaan se osoittamaan # ensimmäiselle riville for datarivi in datarivit: # Käydään läpi kaikki rivit if rivi > 1: # Muut kuin 1. rivi print(datarivi[1]) # tulostetaan rivi += 1 # Muista kasvattaa rivilaskuria!
import csv datatiedosto = open("csv\crash_catalonia.csv") datarivit = csv.reader(datatiedosto) eka_rivi = True # Käsitellään ensiksi eka rivi for datarivi in datarivit: # Käydään läpi kaikki rivit if not eka_rivi: # Muut kuin 1. rivi print(datarivi[1]) # tulostetaan eka_rivi = False # Muista asettaa eka_rivi-muuttuja # arvoon False!
Kolarilukuja oli 7 ja niiden keskiarvo on kahden desimaalin tarkkuudella 16927.00.
tulostus = "Pituus: {:.0f} cm Paino {:.1f} kg" print(tulostus.format(pituus_cm, paino_kg))
hw_small.csv: Pituuksien keskiarvo on 173 cm ja painojen keskiarvo 57.7 kg.
hw_big.csv: Pituuksien keskiarvo on 173 cm ja painojen keskiarvo 57.6 kg.
import csv datafile =open ("csv/hw_small.csv" ) rivit = csv.reader(datafile) indeksiongelmia = 0 pituussumma, painosumma, n = 0.0, 0.0, 0 tuumista_senteiksi = 2.54 paunoista_kiloiksi = 0.453592 eka_rivi =True for riviin rivit:if not eka_rivi:# Ekalla rivillä on vain otsikot try :# Laske pituus senteissä ja summaa: pituus_cm =float (rivi[1]) * tuumista_senteiksi pituussumma += pituus_cm# Laske paino kiloissa ja summaa paino_kg =float (rivi[2]) * paunoista_kiloiksi painosumma += paino_kg# Tulosta molemmat tulostus ="Pituus: {:.0f} cm Paino: {:.1f} kg" except IndexError : indeksiongelmia += 1 eka_rivi =False tulostus ="Pituuden keskiarvo on {pituus_ka:.0f} cm " \"ja painon {paino_ka:.1f} kg." if indeksiongelmia > 0: tulostus ="Indeksiongelmia oli {}" else : tulostus ="Ei indeksiongelmia!"
Alkuperäiset tiedostot: © John Burkardt, Florida State University, Department of Scientific Computing, distributed under the GNU LPGL license.