Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python 15. helmikuuta 2009
Merkkijonot Yleistä Käsittely Muotoiltu tulostus Tiedostot Käsittely Lukeminen Kirjoittaminen Modulit Käyttö Seuraava luento
Yleistä Merkkijonot Merkkijonojen kanssa on hyvä tulla toimeen koska Kaikki tulostettava tieto muutetaan ensin merkkijonoiksi. Usein pitää löytää ja eristää asioita tekstimuotoisesta datasta. Esimerkki Predicted Transit Epochs: HD209458_ b Observed Transit Duration: 184.2 Minutes Begin Transit Window PREDICTED CENTRAL TRANSIT End Transit Window All Times UT HJD Year M D H M 2454395.96 2007 10 22 10 59 24... 32 2454396.09 2007 10 22 14 5 2454399.48 2007 10 25 23 35 24... 8 2454399.61 2007 10 26 2 41 2454403.01 2007 10 29 12 11 24... 44 2454403.14 2007 10 29 15 17 2454406.53 2007 11 2 0 46 24... 19 2454406.66 2007 11 2 3 52 2454410.06 2007 11 5 13 22 24... 55 2454410.19 2007 11 5 16 28 2454413.58 2007 11 9 1 58 24... 31 2454413.71 2007 11 9 5 3 2454417.11 2007 11 12 14 33 24... 6 2454417.24 2007 11 12 17 39
Yleistä Merkkijonot Lainausmerkit Merkkijonoa voi merkitä joko yksin- tai kaksinkertaisilla lainausmerkeillä, kunhan jonon aloittavat ja lopettavat merkit täsmäävät. print "merkkijono" tai merkkijono merkkijono Lainaukset merkkijonoissa Merkkijonon sisälle voi lisätä lainausmerkkejä kahdella eri tavalla. print " blah " tai "blah" "blah" tai blah print "\"blah\"" tai \ blah\ "blah" tai blah
Käsittely Merkkijonojen käsittely Käsittely pääasiassa metodeilla mjono.metodi() Sisältyyko jono toiseen? Usein pitää tietää löytyykö haluttu sana tai lause tekstistä. Tähän käytetään Operaattoria in: karhu in karhunkierros. Metodia find: karhunkierros.find( karhu ). upper ja lower Muuttavat kaikki jonon merkit joko isoiksi tai pieniksi. print Nasu.upper(), Nasu.lower() NASU nasu
Käsittely Merkkijonojen käsittely split(erotin) Jakaa jonon listaksi annetun erottimen perusteella. print 1,2,3,4,5.split(, ) [ 1, 2, 3, 4, 5 ] strip(poistettavat) poistaa tekstin alusta ja lopusta kaikki merkkijonon merkit. print aspiipasas.strip( as ) piip replace(vanha, uusi) korvaa jokaisen jonon vanhan jonolla uusi. print nihnoh.replace( noh, supercalifragilistic ) nih supercalifragilistic
Muotoiltu tulostus Muotoiltu tulostus Muunnos merkkijonoksi Muuttujan voi muuttaa merkkijonoksi Funktiolla str(muuttuja) Numeerisen muuttujan muunnos merkkijonoksi Numeeriselle muuttujalle voi käyttää myös muotoiltua muunnosta. "%muotoilukoodi" %muuttuja Kokonaisluvulle %<#,0,+,-><leveys>i Reaaliluvulle %<#,0,+,-><leveys.desimaaleja><e,f,...> Esimerkki a = 1.5 print a on + str(a) a on 1.5 Esimerkki a = 1.5 print %6.3f %03i %(a, 6) 1.500 006
Käsittely Tiedostojen käsittely Tiedoston käsittelyn vaiheet Tiedostojen käsittely voidaan jakaa kolmeen osaan: Tiedoston avaaminen open(nimi, moodi) komennolla: f = open( data.dat, r ) Tiedostosta lukeminen tai siihen kirjoittaminen metodeilla: data = f.read() data = f.readlines() data = f.write() Tiedoston sulku close() metodilla: f.close() Tiedoston voi avata joko Lukemista r, Kirjoittamista w tai molempia rw varten. Lisäksi myös mm. a, rb, wb
Lukeminen Tiedostosta lukeminen Lukemiseen käytettävistä metodeista read() palauttaa koko tiedoston yhtenä merkkijonona. readline() palauttaa tiedostosta yhden rivin kerrallaan. readlines() palauttaa koko tiedoston rivilistana.
Lukeminen Tiedostosta lukeminen: esimerkki Esimerkki testi.txt: HJD Year M D H M 2454395.96 2007 10 22 10 59 24... 32 2454396.09 2007 10 22 14 5 2454399.48 2007 10 25 23 35 24... 8 2454399.61 2007 10 26 2 41 2454403.01 2007 10 29 12 11 24... 44 2454403.14 2007 10 29 15 17 Esimerkki f = open( testi.txt, r ) datain = f.readlines() f.close() date = [] for line in data: date.append(float(line.split()[0])) print date
Kirjoittaminen Tiedostoon kirjoittaminen Tekstitiedostoon kirjoitetaan metodeilla: write(merkkijono) writelines(lista) Esimerkki a = 1.2 f = open( testi.txt, w ) f.write("jee! %4.1f" % a) f.close() testi.txt: Jee! 1.2
Käyttö Moduli Moduli on pythoniin ladattava kirjasto, joka voi sisältää funktioita, vakioita ja omia tyyppejään. Erilaisiin käyttötarkoituksiin löytyy valtava määrä valmiita moduleita, jolloin pyörää tarvitsee harvoin keksiä uudestaan. Tärkeää! Moduli on yksinkertaisesti normaali python-tiedosto, joka ei sisällä suoritettavaa koodia. Lataaminen Jos meillä on moduli modu.py paikassa josta python löytää sen, se voidaan ladata koodiin komennoilla import mod <as nimi> Yksittäinen asia modulista ladataan komennolla from mod import asia
Käyttö Esimerkki Esimerkkimoduli vektori.py: one = 1.0 class v3d: init (self, x=0.0, y=0.0, z=0.0 ): self.x = x self.y = y self.z = z def dot(a,b): return a.x*b.x + a.y*b.y + a.z*b.z Esimerkki import vektori as v v1 = v.v3d(1.0,2.0,3.0) v2 = v.v3d(1.0,6.0,4.0) print v.dot(v1, v2) + v.one
Käyttö Hyödyllisiä Pythonin peruskirjastoja Muista! Modulin sisällön voi aina tarkistaa komennolla dir(nimi). Math Sisältää matemaattisia funktioita ja vakioita, mm: Neliöjuuri sqrt(x) Potenssi pow(x,p) Trigonometriset funktiot sin(x), asin(x), cos(x),... Luonnollinen eksponentti exp(x) ja logaritmi log(x) π pi Random Satunnaislukujen generointiin. random() palauttaa satunnaisluvun väliltä [0.0, 1.0). Muutakin hyödyllistä: http://docs.python.org/lib/module-random.html.
Käyttö Hyödyllisiä Pythonin peruskirjastoja Os Työkalufunktioita Tiedostopolkujen hallintaan. Prosessien hallintaan. Tiedostojen hallintaan. Sys Järjestelmäfunktioita argv lista joka sisältää skriptille annetut komentoriviparametrit, äärimmäisen hyödyllinen. exit() lopettaa koodin suorittamisen.
Seuraava luento Seuraavalla luennolla Numeerisen datan käsettelemiseen: NumPy Hyödyllisiä kirjastoja. WWW ja tähtitiede: Mistä löytää tietoa, ja kuinka sitä hakea.