Python: Filer og unntak Gaddis: Kapittel 6

Like dokumenter
Python: Filer og unntak Gaddis: Kapittel 6

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

Filbehandling Tekstfiler

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. v=nkiu9yen5nc

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Øvingsforelesning 9 i Python (TDT4110)

Oppsummering fra sist

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

TDT4110 IT Grunnkurs Høst 2014

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Python: Strenger 3. utgave: Kapittel 8

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

Kapittel 1 En oversikt over C-språket

Læringsmål og pensum. if (be): else (not_to_be):

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Del 1 En oversikt over C-programmering

Binærfiler versus tekstfiler

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

Informasjon Prøveeksamen i IN1000 høsten 2018

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Pensum: Starting out with Python

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

IN Notat om I/O i Java

TDT4110 IT Grunnkurs Høst 2015

Betinget eksekvering og logiske tester i shell

ITGK - H2010, Matlab. Repetisjon

IN1000 Repetisjonskurs: IO og listeoperasjoner (+ string)

Løse reelle problemer

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

TDT4105 Informasjonsteknologi, grunnkurs

Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Repetisjon Novice Videregående Python PDF

YouTube-kanal ITGK. Læringsmål og pensum

TDT4110 IT Grunnkurs Høst 2016

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

INF Ekstrainnlevering

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Øvingsforelesning 1 Python (TDT4110)

Informasjon Eksamen i IN1000 høsten 2017

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

TDT4110 Informasjonsteknologi grunnkurs: Uke 48 Oppsummering/Spørretime. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Programmering Høst 2017

Øvingsforelesning 3 Python (TDT4110)

EKSAMENSOPPGAVE I INF-1100

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

TDT4110 IT Grunnkurs Høst 2016

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger Utgave 3: Kap. 8

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Øvingsforelesning i Python (TDT4110)

Øvingsforelesning 5 Python (TDT4110)

Læringsmål og pensum. Oversikt

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Designe et program. TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Mål.

Løse reelle problemer

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

INF Notat om I/O i Java

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Professor Alf Inge Wang

Programmeringsspråket C Del 2

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Øvingsforelesning 5 Python (TDT4110)

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

Eksamensoppgaver 2014

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Transkript:

Python: Filer og unntak Gaddis: Kapittel 6 TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum Mål Lære hva filer er Lære hva unntaksbehandling er Kunne bruke inn- og utoperasjoner i Python Kunne programmere lesing og skriving til fil Kunne bruke unntak (exceptions) Pensum Starting out with Python, Files and Exceptions 2

Inn- og utoperasjoner HVORFOR trenger vi dette? Hittil lest inn data fra tastatur og skrevet ut til skjerm input(), print( ) ok for små eksempler, men praktisk ubrukelig Typisk situasjon i den virkelige verden Store datamengder Oftest fra nettet, sensorer etc. sjeldnere tastet inn av bruker Data må huskes til senere bruk Selv om programmet avsluttes, datamaskin slås av etc. Trenger input/output (I/O) med filer dere har brukt filer allerede (.py,.pdf, ) 3

Hva er ei fil i Python? Representert som en verdi av typen file Denne verdien kan f.eks. være i en variabel Verdien / variabelen er ikke fila bare en referanse til fila Hvorfor bruke referanser til filene? Ei fil kan inneholde mye data Kanskje ikke plass til alt i minnet på en gang Men referansen krever mye mindre plass ~ adressa til en bygning tar mye mindre plass enn selve bygningen Via referansen kan vi Navigere gjennom ei fil Finne data vi søker etter Putte deler av fila (eller hele hvis plass) inn i variable 4

Hva er ei fil i Python? (2) I ei fil lagres data etter hverandre (sekvensielt) Kan sammenlignes med en tekststreng Men tegnene ligger i sekundærminne Fila er muterbar (kan endre innhold) Filpeker holder orden på hvor langt man har kommet i fila. kan flyttes ved kommandoer. Filpeker 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 D E T T E E R T E K S T L A G R E T I F I L 5

Filoperasjoner i Python Tre hovedsteg: 1. Fila åpnes Etablerer en referanse til fila på disken Filreferansen blir lagret i en variabel Alle operasjoner på fila må gå via denne variabelen 2. Verdier leses fra og skrives til fila Lesing: Data lagret i fil leses inn og lagres i variable Skriving: Data lagret i variable skrives til fila 3. Fila lukkes Etter at fila er lukket, kan man ikke lese eller skrive til fila Poeng (bl.a.): Frigjøre fila så andre kan bruke den Sørge for at filbruken avsluttes på en trygg måte 6

Filhåndtering i Python Filkommandoer f = open( filnavn ) f = open( filnavn, tilgang ) f.read() f.read(n) f.readline() f.readlines() f.write(s) f.writelines(liste) f.seek(offset,fra_hvor) f.tell() f.close() Forklaring Åpner ei fil, returnerer filreferanse Åpner ei fil, med spesifisert tilgang. F.eks. w åper ei fil for skriving (se neste side) Returnerer hele innholdet av fila Returnerer n karakterer av innholdet Returnerer neste linje (før \n) Returnerer hele innholdet av fila som ei liste Skriver strengen s til fil Skriver innholdet av liste av strenger til fil Forflytter filpekeren (index) i fila Returnerer posisjon til filpekeren i fila Lukker fila f representerer variabelen som tar vare på filpekeren 7

Åpning av filer For å bruke ei fil må den først åpnes ved open: variabel = open( filnavn, tilgangstype ) Forklaring: variabel: Får en referanse som peker til fila med angitt filnavn filnavn: Angir et stinavn og filnavn til fila som skal åpnes Hvis fila er på samme katalog som programmet trengs ingen sti tilgangstype: kode for typen filoverføring som skal gjøres Eks: f = open( datafil.txt, r ) # Åpner fil for lesing f = open( datafil.txt, w ) # Åpner fil for skriving f = open(r C:\Users\GS\textfiles\fil2.txt, a ) # med sti, legge til # r først inni parentesen for å unngå at \ tolkes som spesielle tegn 8

Tilgangstyper for fopen Vi har følgende tilgangstyper for open: Type Åpner for Tidl. innh. Hvis fila ikke fins? r Lesing. Bevares FEIL w Skriving Fjernes Oppretter ny fil a Skriving (bakerst) Bevares Oppretter ny fil r+ Lesing og skriving Bevares FEIL w+ Lesing og skriving Fjernes Oppretter ny fil a+ Lesing og skriving (bakerst) Bevares Oppretter ny fil 9

Lukking av filer Hvis flere programmer endrer på ei fil samtidig Kan lett bli tull Operativsystemet vil derfor nekte dette Etter at programmet er ferdig med å bruke fila: Lukk fila for å si ifra at den kan brukes av andre I noen tilfeller vil skrevne data heller ikke havne på fila hvis man glemmer å lukke den til slutt filvariabel.close() # Lukker fila 10

Skrive til fil For å skrive data til fil i Python brukes følgende: f.write(s) # Skriver strengen s til fil med referanse f f.writelines(liste) # Skriver en liste av strenger til fila Vi ser på et program som lar brukeren Angi et filnavn (og åpne fila for skriving) Gi inn tekst fra tastatur linje for linje (tom linje for å slutte) og tekstene lagres på fila To varianter: med write() filtest1, med writelines() filtest2 filtest1.py filtest2.py 11

Viktig å merke seg! write(), writelines() avslutter ikke default med linjeskift I motsetning til print() For å skrive linjeskift i fila må vi eksplisitt legge til \n Kun tekststrenger kan skrives til filer Andre typer data (f.eks. tall) må konverteres til strenger Kan bruke str(variabel) Tilsvarende ved lesing av filer: Må eksplisitt strippe \n fra data lest fra fil hvis vi ikke vil ha den Hvis vi skal få tall, må vi konvertere fra strenger til tall F.eks int( ), float( ) 12

Lese strenger fra fil For å lese strenger fra fil, benyttes: streng = filvariabel.read() # returnerer hele innholdet streng = filvariabel.readline() #eller n tegn hvis parameter angis read(n) # returnerer ei linje streng = filvariabel.readlines() # returnerer ei liste av linjene read() og readlines() bør unngås for store filer. readline() og readlines() krever fil delt med linjeskift (\n). readline() : bruke while-løkke for å sjekke om fila er slutt readlines() : lese hele i en setning, uten løkke Vi ser på hvordan de virker i interaktiv modus 13

Å bruke Pythons for-løkke til å lese linjer Python tillater å skrive ei for-løkke som leser linjer fra fil og slutter ved enden av fila: Format: for line in file_object: kode.. Løkka går igjennom (itererer) fila linje for linje Eksempel: Vi har noen filer med datoer og valutakurser Ønsker å lese disse inn i liste, gjøre om kursene til tall Gjøre en enkel analyse av kursutviklingen (min, max, snitt) Kode: valutaanalyse.py 14

Oppgave: lese og skrive filer Joe vil analysere kursen på EUR vs AUD Har ingen fil for dette Men har filer for begge valutaene vs. NOK Lag et program som Leser inn i lister kursene for EUR og AUD Hint: bruk les_inn_kursutvikling() fra eksemplet Filene heter EUR_NOK.txt og AUD_NOK.txt Lager ei fil EUR_AUD.txt i tilsvarende format Kode: eur-vs-aud1.py Løsning: eur-vs-aud2.py 15

Unntak ( Exceptions ) Kapittel 6.4

Exception / Unntak Under kjøring av program kan det oppstå feil Programmet stopper, feilmelding i rødt F.eks. divisjon på 0, for stor indeks til liste eller streng, forsøk på å addere, bruke int() på en streng som ikke består av sifre, Unntak kan brukes generelt i Python, ikke bare for filer Men brukes særlig hyppig for filer, pga mange mulige feil: Forsøk på å åpne fil som ikke fins Fila er under bruk av andre, kan ikke åpnes Lagringsmediet er korrupt, kan ikke leses Data på fil har annet format enn forventet try/exception kan unngå at programmet stopper opp I stedet håndtere feilen på en mer elegant måte. 17

Exception: try except uttrykk Usikker kode skrives inne i et try: uttrykk Hvis alt går som det skal, er det koden inni try som kjøres Alternativ kode ved eventuelle feil: except ExceptionName: try: uttrykk uttrykk except ExceptionName: uttrykk uttrykk # En feil i try-blokka trigger except # Hopper hit hvis feil i try # (såframt type unntak stemmer) Minner om et if-else-uttrykk 18

Exception ExceptionName Ulike typer Exceptions har ulike navn, f.eks. ValueError: feil data for funksjon, f.eks. int( ost ) TypeError feil type data for operasjon, f.eks 2+ ost ZeroDivisionError: prøver å dividere med 0 IndexError: feil indeks, f.eks a=[8,3,2], x=a[4] OSError Feil ved bruk av OS-funksjoner, f.eks filer IOError er f.o.m. Python v 3.3 bare en alias for denne Flere undertyper: FileNotFoundError, FileExistsError, Exception: Alle mulige feil (generell) Vi tuller litt med fila AUD.txt og ser hvordan dette påvirker programmet vårt Kode: eur-vs-aud2.py, eur-vs-aud3.py 19

Exception vis feilmelding Det er mulig å vise feilmeldingen som Python gir: try: uttrykk except Exception as variabel: print(variabel) Uttrykket as variabel lagrer feilmeldingen i variabelen eur-vs-aud4.py 20

Exception else og finally Et try except uttrykk kan også bestå av else og finally: else blir utført hvis ingen exceptions ble trigget. finally blir utført til slutt, uansett om exceptions ble trigget eller ikke try: uttrykk except ExceptionName: uttrykk else: uttrykk finally: uttrykk eur-vs-aud5.py

Filhåndteringsprosess Tre hovedsteg: 1. Åpne fil med en gitt aksess 2. Lese fra /skrive til fila, evt. forflytte filpeker 3. Lukke fila Vi kan jobbe med flere filer samtidig: Filvariabelen med referanse til fila bestemmer hvilken fil vi jobber med. Kan f.eks. la bruker skrive inn filnavn fra tastaturet Velge mellom alternative filer for lesing Eller alternative filer å skrive til 22

Exceptions / Unntak Exception: feil som skjer når et program kjører Som regel fører det fører det til at programmet stopper (kræsjer, feilmelding) Exception handling: Håndtere exceptions ved å kjøre alternativ kode heller enn å kræsje Benytter: try: # Prøv om koden lar seg kjøre except # Fanger opp hvis koden i try feiler except Exception as variable: # fanger feilmelding else: # Kjøres hvis det ikke blir exception finally: # Kjøres uansett til slutt 23