Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Ohjelmointia teknisille viestijöille

Samankaltaiset esitykset


Esitys aiheesta: "Ohjelmointia teknisille viestijöille"— Esityksen transkriptio:

1 Ohjelmointia teknisille viestijöille
Tekninen viestintä Ohjelmointia teknisille viestijöille

2 TAPAHTUI VIIME JAKSOSSA
Tiedostojen tarkasteluun liittyviä funktioita löydät os- ja os.path-moduuleista Hakemiston sisällön poimiminen listamuotoon listaus = os.listdir("hakemisto") Hakemistopolun kokoaminen palasista: polku = os.path.join("C:",os.sep,"hakemisto","alihakemisto") Tiedoston/hakemiston olemassaolon tarkastaminen: if os.path.exists(polku) Tiedoston/hakemiston tyypin tarkastus: if os.path.isfile(polku) if os.path.isdir(polku) Tiedostonimen poimiminen muuttujaan: filename = os.path.splitext(someFilename)[0] Tiedostopäätteen poimiminen muuttujaan: fileExt = os.path.splitext(someFilename)[1]

3 TAPAHTUI VIIME JAKSOSSA
Tiedostojen avaaminen, sulkeminen ja poistaminen onnistuu myös kätevästi Pythonilla: polku = os.path.join("..", "..", "tiedostot", "teksti.dita") tiedosto = open(polku) for rivi in tiedosto: print rivi tiedosto.close() os.remove(tiedosto)

4 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
lukee hakemistosta kaikki sen sisältämät tiedostot tulostaa jokaisen Python-tiedoston nimen ja tiedoston kommenttirivit ruudulle

5 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
lukee hakemistosta kaikki sen sisältämät tiedostot lukee hakemistossa olevat xml-tiedostot, ja jos ne ovat task-moduuleja, tulostaa niiden sisällön ruudulle

6 HARJOITUS: TIEDOSTOT # 1 # Tuodaan os- ja os.path-moduulit
import os,os.path # Luetaan hakemisto listaksi listaus = os.listdir(".") # Luetaan tiedostot silmukassa for tiedosto in listaus: # Tarkastellaan vain Python-tiedostoja if ".py" in tiedosto: # Avataan tiedosto ja luetaan se rivi kerrallaan sisalto = open(tiedosto) for rivi in sisalto: if "#" in rivi: print(rivi.strip())

7 HARJOITUS: TIEDOSTOT #2 import os hakemisto = os.listdir(".")
for tiedosto in hakemisto: paate = os.path.splitext(tiedosto)[1] if paate == ".dita": lukuTiedosto = open(tiedosto) # Luetaan rivit listamuotoon tiedostoRivit = lukuTiedosto.readlines() if "task" in tiedostoRivit[2]: for rivi in tiedostoRivit: print (rivi) lukuTiedosto.close()

8 MINIPROJEKTI: TEKSTITUTKAILIJA
Tilastoihin pääse tällä erää hiukkasen turhaa sisältöä Kuinka ohjelmaa voisi hioa, jotta turha sisältö saataisiin karsittua minimiin ja tilastoja tarkemmaksi? Saisiko samalla poimittua talteen myös pisimmän lauseen pituuden, ja itse lauseen? Mahtaisiko säännöllisistä lausekkeista (regular expressions) olla tehtävässä apua?

9 Tekninen viestintä Ikiomat funktiot

10 FUNKTIOT Pythoniin sisäänrakennettujen funktioiden, eli aliohjelmien, lisäksi kieli sallii myös omien funktioiden määrittämisen Funktioiden avulla omia ohjelmia voi selkiyttää – jos ohjelmassa tarvitaan jotain koodirakennetta useasti, voit määrittää kerran ja käyttää aina tarvittaessa

11 FUNKTIOT Omat funktiot toimivat kuten muutkin funktiot – ne voivat suorittaa jonkun tehtävän tai palauttaa tietynlaisen arvon Kuten Pythonin sisäänrakennettuihin funktioihin, myös omiin funktioihin voi halutessaan syöttää parametreja, joita funktio käyttää toiminnoissaan

12 FUNKTIOT Funktion määrittäminen alkaa def-avainsanalla ja funktion nimellä: Tämän jälkeen tarvitaan sulkeet, joiden sisään määritetään funktiossa käytettävät parametrit: Lopuksi, funktion määrittävän lauseen loppuun lisätään kaksoispiste: def kertolaskija def kertolaskija(arvo1, arvo2) def kertolaskija(arvo1, arvo2):

13 FUNKTIOT Funktion suorittamat toiminnot määritetään sisennettyyn koodilohkoon funktion määrittävän lauseen alle: Funktiota käytetään kutsumalla sitä: Kutsuttaessa käytettävät arvot tallentuvat funktiossa määritettyihin muuttujiin. Luku 5 tallentuu muuttujaan arvo1 ja luku 12 muuttujaan arvo2 def kertolaskija(arvo1, arvo2): tulo = arvo1 * arvo2 kertolaskija(5, 12)

14 FUNKTIOT Funktiota määrittäessä käytettävät muuttujat voi nimetä mielensä mukaan Niitä voi käyttää funktion sisällä kuten tavallisia muuttujia def kertolaskija(arvo1, arvo2): tulo = arvo1 * arvo2 print(arvo1) str(arvo2)

15 FUNKTIOT Jotta funktion suorittamasta työstä – tässä tapauksessa kertolaskusta – voi hyötyä ohjelmassa, funktio voi palauttaa arvon Funktion palauttaman arvon voi tallentaa haluamaansa muuttujaan ja käyttää ohjelmassa: def kertolaskija(arvo1, arvo2): tulo = arvo1 * arvo2 return tulo vastaus = kertolaskija(5, 12) print(vastaus) >>> 60

16 FUNKTIOT Funktio voi sisältää niin monta koodiriviä kuin tehtävän suorittaminen vaatii Funktiot eivät ole monitoimityökaluja – hyvä funktio tekee vain yhden asian, mutta tekee sen hyvin. def kaantaja(kaannettava): kaannos = kaannettava[::-1] return kaannos print(kaantaja("Apinalauma")) >>> amualanipA numerolista = [1,2,3,4,5,6] print(kaantaja(numerolista)) >>> [5, 4, 3, 2, 1]

17 FUNKTIOT JA PARAMETRIT
Kun kutsut funktiota, joka vaatii parametrin, täytyy parametrin oletusarvoisesti olla kutsussa mukana: def tervehtija (nimi): print ("Tervetuloa ohjelmaan {}".format(nimi)) tervehtija("Mika") >>> Tervetuloa ohjelmaan Mika tervehtija() >>> TypeError: tervehtija() missing 1 required positional argument: 'nimi'

18 FUNKTIOT JA PARAMETRIT
Aliohjelmaan syötetyt parametrit määritetään aliohjelman nimettyihin muuttujiin siinä järjestyksessä kuin ne on syötetty kutsuun def tervehtija (nimi, ika): print("Tervetuloa {}".format(nimi)) print("Olet {}-vuotias".format(ika)) nimi = "Erkki Mustakari" tervehtija(27, nimi)

19 FUNKTIOT JA PARAMETRIT
...jos et funktiota kutsuttaessa määritä mihin parametriin mikäkin arvo viittaa def tervehtija (nimi, ika): print("Tervetuloa {}".format(nimi)) print("Olet {}-vuotias".format(ika)) omaNimi = "Erkki Mustakari" tervehtija(ika=27, nimi=omaNimi)

20 FUNKTIOT JA PARAMETRIT
Siltä varalta, että parametri unohtuu syöttää, joka parametrille voi määrittää oletusarvon: HUOM! Parametrit, joilla on oletusarvot, tulee sijoittaa parametrilistan loppuun def tervehtija (nimi="Mika", ika = 77): print("Tervetuloa ohjelmaan {}".format(nimi)) print("Olet {}-vuotias".format(ika)) tervehtija() >>> Tervetuloa ohjelmaan Mika >>> Olet 77-vuotias tervehtija("Esko Noppa", 35) >>> Tervetuloa ohjelmaan Esko Noppa >>> Olet 35-vuotias

21 FUNKTIOT JA PARAMETRIT
Oletusarvojen ansiosta aliohjelmiin voi syöttää tarvittaessa vain haluamansa arvon ja luottaa toisten arvojen osalta oletusarvoihin def tervehtija (nimi="Vieras", ika = 27, kengannumero = 44): print ("Tervetuloa ohjelmaan {}".format(nimi)) print ("Olet {}-vuotias".format(ika)) print("Kengännumerosi on {}" .format(kengannumero)) tervehtija() tervehtija(kengannumero=42) tervehtija(ika=55)

22 FUNKTIOT JA MUUTTUJAT Funktioissa luotavat muuttujat ovat ns. paikallisia muuttujia Funktiossa voi käyttää paikallisia muuttujia tai ennen funktiota määritettyjä globaaleja muuttujia

23 FUNKTIOT JA MUUTTUJAT Mitä seuraavat ohjelmat tulostavat? luku = 100
def funktio1(): print(luku) def funktio2(): luku = 75 funktio1() funktio2()

24 FUNKTIOT JA MUUTTUJAT Globaaleja muuttujia ei oletusarvoisesti voi muokata funktion sisältä Niitä voi kuitenkin käyttää funktioissa uusien muuttujien määrittämisessä luku1 = 100 def funktio(): luku2 = luku print(luku2) >>> 199

25 FUNKTIOT JA MUUTTUJAT Globaalin muuttujan arvoa voi tarvittaessa (tarvetta harvoin on) muuttaa global-avainsanan avulla luku1 = 100 def funktio(): global luku1 luku1 = 99 print(luku1) >>> 99

26 FUNKTIOT JA MUUTTUJAT Poikkeus sääntöön ovat listat ja sanakirjat
Niiden yksittäisiä arvoja on mahdollista muuttaa indeksiluvun perusteella a = [1,2,3] def funktio(): a[0] = 5 print(a) >>> [5, 2, 3]

27 MINIPROJEKTI: RAKENNE SIISTIMMÄKSI
Funktioiden avulla ohjelmien rakennetta voi muokata siistimpään, helpommin luettavaan ja ymmärrettävään muotoon Funktioista ei kannata tehdä liian monipuolisia – hyvä funktio toteuttaa yhden tehtävän hyvin Kuinka funktioiden avulla tekstitutkailija-ohjelmasta saisi siistimmän ja helpompilukuisen?

28 HARJOITUS: TIEDOSTOT Kirjoita ohjelma jossa on funktio, joka tervehtii käyttäjää

29 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka: Kysyy käyttäjän nimen
Tervehtii funktion avulla käyttäjää nimeltä; jos käyttäjä ei syötä nimeä, ohjelma käyttää tästä nimitystä ”vieras”

30 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
Kysyy käyttäjältä kahta lukua Tulostaa käyttäjälle lukujen tulon funktion avulla

31 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
Tulostaa funktion avulla käyttäjälle satunnaisen mietelauseen listasta mietelauseita, jotka ohjelmaan on tallennettu

32 Funktioiden paluuarvot
Tekninen viestintä Funktioiden paluuarvot

33 PALUUARVOT Useat Pythonin sisäänrakennetut funktiot palauttavat arvoja: input() palauttaa käyttäjän syöttämän arvon int() palauttaa parametrina annetun arvon kokonaislukuna os.path.isfile() palauttaa totuusarvon joka ilmaisee oliko parametrina annettu arvo tiedosto

34 PALUUARVOT Omat funktiot voivat muiden funktioiden tapaan palauttaa jonkun arvon Näin funktioissa voi suorittaa esim. laskutoimituksia tai muuten käsitellä funktioon syötettyjä arvoja Paluuarvon voi tuttuun tapaan tallentaa muuttujan kun funktio on suoritettu

35 PALUUARVOT Paluuarvo määritetään return-lauseen avulla:
Paluuarvoja käyttämällä funktioiden tehtäviä saa eriytettyä tehokkaasti def kertolaskuri(luku1=1, luku2=1): tulos = luku1 * luku2 return tulos luku1 = int(input("Syötä kerrottava luku: ")) luku2 = int(input("Syötä toinen kerrottava luku: ")) tulo = kertolaskuri(luku1, luku2) print ("{} kertaa {} on on {}".format(luku1, luku2, tulo))

36 PALUUARVOT import os, os.path lopeta = False while not lopeta: hakemisto = input("Syötä hakemisto, jonka sisällön haluat nähdä tai 'L' lopettaaksesi: ").strip() if hakemisto.upper() == "L": lopeta = True else: while not os.path.exists(hakemisto) or not os.path.isdir(hakemisto): if not os.path.isdir(hakemisto): hakemisto = input("{} ei ole hakemisto. Syötä hakemisto: ".format(hakemisto)) hakemisto = input("Hakemistoa {} ei ole. Syötä hakemisto: ".format(hakemisto)) sisalto = os.listdir(hakemisto) print("\nHakemiston {} sisältö:".format(hakemisto)) for tiedosto in sisalto: nimiJaPolku = os.path.join(hakemisto, tiedosto) print (tiedosto)

37 PALUUARVOT Paluuarvot voivat olla joko konkreettisia arvoja – merkkijonoja, lukuja, listoja tai muita – tai sitten omaa funktiota voi käyttää arvojen tarkastamiseen Tällöin paluuarvona voi käyttää totuusarvoja, jotka kertovat toteutuiko tarkastettava asia vaiko ei

38 TOTUUSARVOT JA PALUUARVOT
Esimerkiksi os.path-moduulin isfile()-aliohjelma palauttaa totuusarvon kertoakseen oliko tarkastettava kohde tiedosto: if os.path.isfile("TECHS tehtavat-5.txt"): os.remove("TECHS tehtavat-5.txt")

39 TOTUUSARVOT JA PALUUARVOT
Käyttämällä funktioiden paluuarvoina totuusarvoja, voit käyttää omiakin funktioita ehtoina samalla tavalla: def isDitaFile(filename): ditaExt = ".dita" if os.path.splitext(filename)[1].lower() == ditaExt: return True else: return False for file in filelist: if isDitaFile(file): print("{} on DITA-tiedosto".format(file))

40 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
Kysyy funktion avulla käyttäjän nimeä. Funktio ei saa hyväksyä tyhjää nimeä Tulostaa käyttäjän syöttämän nimen toisen funktion avulla

41 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
Kysyy funktion avulla hakemistoa, jonka sisällön käyttäjä haluaa nähdä ja varmistaa että hakemisto on varmasti olemassa Kysyy funktion avulla minkä tyyppiset tiedostot käyttäjä haluaa hakemistosta nähdä Tulostaa toisen funktion avulla hakemiston sisällöstä oikeaa tyyppiä olevien tiedostojen nimet

42 Tiedostojen tutkailu, osa 3
Tekninen viestintä Tiedostojen tutkailu, osa 3

43 XML-TIEDOSTOT XML-tiedostoja voi lukea rivi kerrallaan, mutta useimmiten se ei ole fiksuin tapa toimia Pythonin xml-moduuliin kuuluvan ElementTree-moduulin avulla XML-tiedostojen puurakenteen tarkastelu käy kätevästi

44 XML-TIEDOSTOT task title taskbody context steps step cmd uicontrol
related-links link

45 XML-TIEDOSTOT Koska moduulin varsinainen nimi on pitkä, se kannattaa tuoda ohjelmaan aliaksen avulla import xml.etree.ElementTree as ET import os file = os.path.join("ditafiles","topic.dita") tree = ET.parse(tiedosto)

46 XML-TIEDOSTOT XML-tiedosto ladataan muuttujaan käsiteltävätksi parse-funktion avulla Tämän jälkeen muuttujaan tallennetun xml-elementtipuun juurielementin voi noutaa getroot-funktiolla file = os.path.join("topic.dita") tree = ET.parse(tiedosto) print(type(tree)) root = tree.getroot()

47 XML-TIEDOSTOT Jokaiseen ElementTreen avulla käsiteltävään elementtiin liittyy joukko attribuutteja tag-attribuutti kertoo elementin tyypin attrib-attribuuttiin on tallennettu elementin attribuutit sanakirja-muodossa text-attribuutti sisältää elementin tekstisisällön file = os.path.join("topic.dita") tree = ET.parse(tiedosto) root = tree.getroot() print(root.tag) print(root.attrib) print(root.attrib["id"]) print(root.text)

48 XML-TIEDOSTOT ElementTree ei osaa käsitellä nimiavaruuksia kovin hyvin
Tämän vuoksi poikkeava nimiavaruus täytyy kirjoittaa auki attribuutteja haettaessa print(root.attrib["id"]) EI NÄIN: print(root.attrib["xml:lang"]) VAAN NÄIN: print(root.attrib["{

49 XML-TIEDOSTOT getroot-funktion avulla voit rakentaa esim. funktion oman funktion, joka tarkastaa sille syötetyn DITA-moduulin tyypin ja tunnuksen def ditaTypeCheck(file): tree = ET.parse(file) root = tree.getroot() print("tiedosto on {}-moduuli".format(root.tag)) print("tiedoston ID on {}".format(root.attrib["id"]))

50 XML-TIEDOSTOT Tiedoston sisältöä voi tarkastella muutamalla eri tavalla Yksi tapa on etsiä elementtejä find- ja findall-funktioilla file = os.path.join("topic.dita") tree = ET.parse(tiedosto) root = tree.getroot() title = root.find("title") print(title.text)

51 XML-TIEDOSTOT Find-funktio palauttaa ensimmäisen löytämänsä hakua vastaavan elementin Jos hakua vastaavaa elementtiä ei löydy, funktio palauttaa None-objektin file = os.path.join("topic.dita") tree = ET.parse(tiedosto) root = tree.getroot() title = root.find("title") print(title)

52 XML-TIEDOSTOT Findall-funktio puolestaan palauttaa listan, jolla on kaikki hakua vastaavat elementit Jos hakua vastaavaa elementtiä ei löydy, myös tämä funktio palauttaa None-objektin file = os.path.join("topic.dita") tree = ET.parse(tiedosto) root = tree.getroot() steps = root.findall("step") >>> None steps = root.findall("taskbody/steps/step")

53 XML-TIEDOSTOT task Sekä find- että findall-funktiot etsivät elementtejä sen elementin alta, jossa funktio suoritetaan Esimerkin task-elementin alta löytyy suoraan vain title-, taskbody- ja related-links-elementit title taskbody context steps step cmd uicontrol step cmd related-links link

54 XML-TIEDOSTOT Muihin elementteihin pääsee käsiksi xpath-kielen avulla
task Muihin elementteihin pääsee käsiksi xpath-kielen avulla Esim. ensimmäisen step-elementin löytää task-elementin alta näin: root.findall(taskbody/steps/step) title taskbody context steps step cmd uicontrol step cmd related-links link

55 XML-TIEDOSTOT iter-funktio tarjoaa tavan lukea kaikki tiedoston elementit kerralla Funktio tarkastelee halutun elementin kaikki lapsielementit ja niiden lapsielementit järjestyksessä tree = ET.parse(file) for element in tree.iter(): print(element.tag) print(element.text)

56 HARJOITUS: TIEDOSTOT Kirjoita ohjelma, joka:
Käy hakemistoon tallennetut tiedostot läpi Poimii apufunktion avulla DITA-tiedostot lähempään tarkasteluun Poimii toisen apufunktion avulla concept-muotoiset DITA-tiedostot listalle Tulostaa lopuksi listan

57 HARJOITUS: TIEDOSTOT Muunna edellistä ohjelmaan niin, että:
Se käy läpi hakemistoon tallennetut tiedostot Poimii apufunktion avulla DITA-tiedostot lähempään tarkasteluun Koostaa apufunktion avulla listan, johon tallennetaan jokaisen DITA-tiedoston tiedot sanakirja-muodossa Esim: [{"filename":"example-file.dita","id":"fileID","type":"concept","language":"en-US"}, {"filename":"task-file.dita","id":"task-fileID","type":"task","language":"fi-FI"}];

58 BONUSHARJOITUS: TIEDOSTOT
Muunna edellistä ohjelmaan niin, että: Se käy läpi hakemistoon tallennetut tiedostot Poimii apufunktion avulla DITA-tiedostot lähempään tarkasteluun Koostaa apufunktion avulla listan, johon tallennetaan jokaisen DITA-tiedoston tiedot sanakirja-muodossa Kirjoittaa joka tiedoston tiedot CSV-tiedostoon niin, että yhdellä rivillä on yhden DITA-tiedoston tiedot, jossa arvot on erotettu toisistaan puolipisteillä Esim: Get.stuff.done.dita, get.stuff.done, task, en-US

59 BONUSHARJOITUS: TIEDOSTOT
Muunna edellistä ohjelmaan niin, että: Se käy läpi hakemistoon tallennetut tiedostot Poimii funktion avulla DITA-tiedostot lähempään tarkasteluun Koostaa funktion avulla listan, johon tallennetaan jokaisen DITA-tiedoston tiedot sanakirja-muodossa Tulostaa funktion avulla ensin DITA-tiedoston tiedot ruudulla ja sen jälkeen tiedoston sisällön


Lataa ppt "Ohjelmointia teknisille viestijöille"

Samankaltaiset esitykset


Iklan oleh Google