1 TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum
2 Læringsmål Mål Introduksjon til filer (som inndata og utdata) Å bruke løkker til å prosessere filer Å prosessere inndrag Unntak Pensum Starting out with Python Kapittel 7: Files and Exceptions
C H A P T E R 7 Files and Exceptions Copyright 2012 Pearson Education, Inc. Publishing as Pearson Addison-Wesley
4 Intro til fil input og output Kapittel 7.1
5 Introduksjon til filer som inn- og utdata For at et program skal beholde dataene fra gang til gang når du kjører det, må du lagre dem Data lagres til en fil, typisk på en harddisk Lagrede data kan tas frem og brukes senere Skrive data til : lagre data I en fil Utdatafil: en fil som data lagres til
6
7 Introduksjon til filer som inn- og utdata (forts.) Å lese data fra : prosessen med å lese data fra en fil Inndatafil: en fil det leses data fra Tre steg når et program bruker en fil Åpn filen Prosesser filen Lukk filen
9 Filtyper og -objekter Filendinger (extensions): korte tegnsekvenser som dukker opp på slutten av filnavn med et punktum foran Endingen («extension» forteller hva slags type data som er lagret i filen) NB! Dette er bare et navn Filobjekt: objekt som er tilknyttet en spesifikk fil Gir en måte for et program som de kan arbeide med filen med: filobjekter bruker en variabel som referanse
10 Filtyper og -objekter (forts.)
11 Åpne en fil Funksjonen open: brukes til å åpne filer Lager et filobjekt og assosierer det med en fil på disken Generelt format: file_object = open(filename, mode) Mode: streng som spesifiserer hvordan filen åpnes Eksempel: read-only ('r'), writing ('w') og appending ('a') Bare-les / skriv / forlenge
12 Å spesifisere en fils plassering Hvis funksjonen open får et filnavn som ikke inneholder en sti, antar den at filen ligger i samme filkatalog som programmet Hvis programmet kjører og filen er lages der, lages den i den samme filkatalogen som programmet ligger i Alternative stier og filnavn kan spesifiseres i funksjonen open sine argumenter Husk på å gi strengen prefikset 'r' når du spesifiserer alternativ sti på Windows maskiner spesielt
13 Å skrive data til fil Metode: en funksjon som tilhører et objekt Utfører operasjoner ved å bruke dette objektet Et filobjekts write-metode brukes til å skrive data til den filen: Format: file_variable.write(string) Filen skal lukkes ved å bruke filobjektets closemetode: Format: file_variable.close()
14 Å lese data fra fil Metoden read: filobjektets metode som leser hele filinnholdet til internminnet Virker bare hvis filen er åpnet for lesing Innholdet returneres som en string Metoden readline: filobjektets metode som leser en linje fra filen: Linjen returneres som en streng, inklusive '\n' Read position: angir plasseringen til det neste elementet som leses fra filen
15 Å konkatinere et linjeskift til, og fjerne det fra en streng Som regel er data som skrives til fil verdier som refereres til via variabler Ofte nødvendig å konkatinere en '\n' til data før det skrives Utføres med å bruke operatoren + i argumentet til metoden write Ofte trengs fjering av '\n' fra en streng etter den er lest fra fil: Metoden rstrip: en streng-metode som fjerner spesifikke tegn fra slutten på en streng
16 Å tilføye data til en eksisterende fil Når en fil åpnes med modusen 'w', overskrives den dersom den allerede finnes For å tilføye data til fil, bruk modusen 'a' Hvis filen eksisterer, slettes den ikke, og hvis den ikke finnes opprettes den Data skrives der hvor det nåværende innholdet til filen slutter
17 Å lese og skrive numeriske data Tall må gjøres om til strenger før de kan skrives til fil (konvertering) Funksjonen str: konverterer en verdi til streng Tall leses fra tekstfiler som strenger Må gjøres om til numeriske typer for å kunne utføre matematiske opeerasjoner Bruk funksjonene int og float for å konvertere strenger til numeriske verdier
18 Bruk av løkker til å prosessere filer Kapittel 7.2
19 Å bruke løkker til å gå gjennom filer Filer brukes ofte til å inneholde store datamengder Løkker brukes til å lese fra og skrive til filer Ofte er antallet enheter lagret i en fil ukjent Metoden readline bruker en tom streng for å signalisere at slutten på filen er nådd Du kan skrive en while-løkke med betingelsen: while line!= ''
20
21 Å bruke Pythons for-løkke til å lese linjer Python tillater programmører å skrive en for-løkke som automatisk leser linjer til fil og slutter når den når filens slutt Format: for line in file_object: statements Løkken itererer en gang over hver av filens linjer
22 Prosessere arkiv ( Records ) Kapittel 7.3
23 Å prosessere dataopptegnelser Record/Opptegnelse: samling data som beskriver én enhet Felt: et stykke data i en opptegnelse Skriv en opptegnelse til en sekvensielt aksessert fil ved å skrive feltene etter hverandre Les opptegnelser fra sekvensielt aksesserte filer ved å lese hvert felt til opptegnelsen er fullstendig
24 Å prosessere dataopptegnelser (forts.) Når man jobber med opptegnelser er det også viktig å være i stand til å: Legge til opptegnelser Vise opptegnelser Søke etter en spesifikk opptegnelse Gjøre om på opptegnelser Slette opptegnelser
25 Unntak ( Exceptions ) Kapittel 7.4
26 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) Traceback/Sporing: feilmelding som angir informasjon angående linjene som førte til feilen Gir en indikasjon på hvilken type «exception» og litt informasjon om feilen som førte til at unntaksfeilen oppstod
27 Exceptions (forts.) Mange exceptions kan unngås ved å programmere forsiktig: Eksempel: sjekking av inndata Normal brukes enkle beslutingskonstruksjoner Noen exceptions kan likevel ikke unngås Eksempler Å prøve å konvertere ikke-numeriske strenger til integer Å prøve å åpne en fil å lese den hvis den ikke finnes
28 Exceptions (forts.) Exception handler: kode som responderer når exceptions utløses og hindrer at programmet kræsjer I Python gjøres dette med uttrykket try/except: Generelt format: try: statements except exceptionname statements Try suite: uttrykk som potensielt kan utløse en exception Handler: uttrykk som holdes i et except-avsnitt
29 Exceptions (forts.) Hvis et uttrykk i en «try suite» utløser en «exception» Exception spefiseres i en exception-setning Håndtereren som kommer rett etterpå kjøres Fortsett programmet etter try/except-uttrykket Andre «exception»-typer Programmet stopper med en «traceback»-feilmelding Hvis ingen «exceptions» utløses, hoppes håndtererene over
30 Å håndtere mange exceptions Ofte kan kode i en «try suite» utløse flere en en «exception»-type Man må da skrive en except-klausul for hver exception-type som må håndteres En except-klausul som ikke ikke angir en liste av spesifikke «exceptions» vil håndtere en hvilken som helst «exception» som utløses i den aktuelle «try suite» Bør alltid komme sist i en serie av except-klausuler
31 Å vise en «exceptions» standard feilmelding Exception-objekt: et objekt som lagres i minnet når en «exception» utløses Normalt inneholder den en standardfeilmelding som gjelder denne «exception» Kan tilordne et «exception»-objekt til en variabel i en «except»- klausul Eksempel: except ValueError as err: Kan sende «exception»-objektet til funksjonen print for å vise standardfeilmeldingen
32 Klausulen else try/except uttrykkene kan inkludere den valgfrie klausulen else, som dukker opp etter alle exceptklausulene Stilles overfor try og except-klausuler Syntaksen likner else-klausuler i beslutningsstrukturer Else suite: en blokk av uttrykk som kjøres etter uttryket i den aktuelle «try suite», bare hvis ingen «exception» er utløst Hvis en «exception» er utløst, så hoppes else-suiten over
33 Klausulen finally try/except-uttrykk kan inkludere en valgfri klausul finally, som dukker opp etter alle exceptklausulene Stilt overfor try og except klausuler Generelt format: finally: statements «Finally suite»: uttrykksblokk etter en finally klausul Kjører om en «exception» utløses eller ei Formålet er å utføre en opprenskning før avslutning
34 Hva om en «exception» ikke håndteres? To måter for å en «exception» å være ikke-håndtert: Ingen except-klausul som spesifiserer akkurat denne typen «exception» Den aktuelle «exception» utløses utenfor en «try suite» I begge tilfeller, vil en slik «exception» føre til at programmet stopper opp Python-dokumentasjonen har informasjon om «exceptions» som kan utløses av forskjellige funksjoner
35 Oppsummering Dette kapittelet dekket: Filtyper og måter å aksessere dem Filnavn og filobjekter Å skrive data til fil Å lese data fra fil og å avgjøre når man har nådd slutten på filen Å prosessere opptegnelser i en fil «Exceptions», med: «Traceback»-feilmeldinger Håndtere «exceptions»