Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Harjoitustyön kirjasto, jossa on kaikki aliohjelmat. Ohjelma lukee,
- # analysoi ja kirjoittaa ilmatieteenlaitoksen datasta paisteaikoja.
- # Luokka jossa on päivämäärä, kellonaika ja paisteaika.
- import itertools
- class DATA:
- def __init__(self,pvm,klo,paisteaika):
- self.pvm = pvm
- self.klo = klo
- self.paisteaika = paisteaika
- # Aliohjelma kysyy havaintoaseman nimeä ja vuotta.
- def kysytiedot():
- havaintoasema = input("Anna havaintoaseman nimi: ")
- try:
- vuosi = int(input("Anna analysoitava vuosi: "))
- except ValueError:
- print("Anna vuosiluku kokonaislukuna.")
- print()
- return [havaintoasema, vuosi]
- # Aliohjelma lukee tiedoston ja lisää datan olioihin ja listaan.
- def luetiedosto(tiedot):
- import sys
- lista = []
- tiedostonimi = "{}{}.txt".format(tiedot[0], str(tiedot[1]))
- try:
- tiedosto = open(tiedostonimi, "r")
- except FileNotFoundError:
- print("Tiedoston '{}' avaaminen epäonnistui.".format(tiedostonimi))
- sys.exit(0)
- try:
- rivit = tiedosto.readlines()
- except IOError:
- print("Tiedoston '{}' lukeminen epäonnistui.".format(tiedostonimi))
- for i in range(1,len(rivit)):
- rivi = rivit[i]
- sarakkeet = rivi.split(';')
- data = DATA(sarakkeet[0],sarakkeet[1],sarakkeet[2])
- lista.append(data)
- print("Tiedosto '{}' luettu. Tiedostossa oli {} riviä.".format(tiedostonimi, len(rivit) + 1))
- tiedosto.close()
- print()
- return lista
- # Aliohjelma analysoi ja laskee paisteaikoja.
- def analysoitiedosto(lista):
- sanakirj = {}
- for i in lista:
- sanakirj[i.pvm] = 0
- for i in lista:
- sanakirj[i.pvm] += int(i.paisteaika)
- lista2 = itertools.islice(lista, 0, None, 24)
- päivämäärät = []
- ajat = []
- summa = 0
- for i in lista2:
- numerot = i.pvm.split("-")
- päivämäärät.append("{}.{}.{}".format(numerot[2],numerot[1],numerot[0]))
- summa += int(sanakirj[i.pvm])
- ajat.append(int(summa/60))
- tiedot = [päivämäärät,ajat]
- print("Data analysoitu ajalta {} - {}.".format(päivämäärät[0],päivämäärät[-1]))
- print()
- return tiedot
- # Aliohjelma kirjoittaa analysoidut tulokset käyttäjän syöttämään tiedostoon.
- def tallennatiedot(havaintoasema,tiedot):
- import sys
- tiedostonimi = input("Anna tulostiedoston nimi: ")
- try:
- tiedosto = open(tiedostonimi,"w")
- except PermissionError:
- print("Tiedoston '{}' avaaminen epäonnistui.".format(tiedostonimi))
- sys.exit(0)
- try:
- tiedosto.write("Pvm")
- for i in tiedot[0]:
- tiedosto.write(";"+i)
- tiedosto.write("\n{}".format(havaintoasema))
- for i in tiedot[1]:
- tiedosto.write(";"+str(i))
- tiedosto.write("\n")
- except FileNotFoundError:
- print("Tiedoston '{}' kirjoittaminen epäonnistui.".format(tiedostonimi))
- tiedosto.close()
- print("Paisteaika tallennettu tiedostoon '{}'.".format(tiedostonimi))
- print()
- return None
- # Ohjelman valikko.
- def valikko():
- print("Mitä haluat tehdä:")
- print("1) Anna havaintoasema ja vuosi")
- print("2) Lue säätilatiedosto")
- print("3) Analysoi päivittäiset säätilatiedot")
- print("4) Tallenna päivittäiset säätilatiedot")
- print("0) Lopeta")
- try:
- valinta = int(input("Valintasi: "))
- return valinta
- except ValueError:
- print("Anna valinta kokonaislukuna.")
- return valinta
- ________________________________________________________________________________
- ######################################################################
- # CT60A0203 Ohjelmoinnin perusteet
- # Tekijä: Timi Sivonen
- # Opiskelijanumero: 0570452
- # Päivämäärä: 17.11.2019
- # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: Yksin, python.org, realpython.com
- # HUOM! KAIKKI KURSSIN TEHTÄVÄT OVAT HENKILÖKOHTAISIA!
- ######################################################################
- # Pääohjelma joka pyörittää loopilla HT_kirjastostosta aliohjelmia käyttäjän valintojen mukaan.
- # Ohjelma lukee, analysoi ja kirjoittaa paisteaikoja ilmatieteenlaitoksen datasta.
- def paaohjelma():
- import HT_kirjasto
- while True:
- toiminto = HT_kirjasto.valikko()
- if toiminto == 1:
- tiedot = HT_kirjasto.kysytiedot()
- elif toiminto == 2:
- try:
- lista = HT_kirjasto.luetiedosto(tiedot)
- except UnboundLocalError:
- print("Valitse havaintoasema ja vuosi ennen tiedostonlukua.")
- exit(0)
- elif toiminto == 3:
- try:
- analysoitu = HT_kirjasto.analysoitiedosto(lista)
- except UnboundLocalError:
- print("Lista on tyhjä. Lue ensin tiedosto.")
- elif toiminto == 4:
- try:
- HT_kirjasto.tallennatiedot(tiedot[0],analysoitu)
- except UnboundLocalError:
- print("Lista on tyhjä. Lue ensin tiedosto.")
- elif toiminto == 0:
- print("Kiitos ohjelman käytöstä.")
- break
- else:
- print("Valintaa ei tunnistettu, yritä uudestaan.")
- print()
- paaohjelma() # Pääohjelmakutsu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement