Python
Python
Børre Stenseth

Python read / write files

Hva

Du kan kopiere kodeeksemplene inn i moduler og eksperimentere med dem.

Eksempel 1

Enkel module for lesing og skriving av tekst filer. Feil rapporteres ved print. Dette er greitt så lenge vi arbeider med enkle problemer på vår egen maskin.

"""
Simple module for reading and writing txt files
"""
def getTextFile(filename):
    try:
        file=open(filename,'r',encoding='utf-8')
        res=file.read()
        file.close()
        return res
    except:
        print ('Trouble reading: ',filename)
        return None
    
def storeTextFile(filename,txt):
    try:
        file=open(filename,'w',encoding='utf-8')
        file.write(txt)
        file.close()
    except:
        print ('Trouble writing to: ',filename)

# basic testing of this module 
if __name__=="__main__":
    T=getTextFile("mytext.txt")
    if T != None:
        print( T)
        storeTextFile("mycopiedtext.txt",T)

Problemet med denne modulen er at den ikke gir noen indikasjon på hva som er feil, og at den kan skape rare situasjoner når den brukes som tjenerskript. Utskriften kan komme noe umotivert in i den strømmen som skrives tilbake.

Eksempel 2

Her bruker vi unntaksinformasjon og vi lar brukerkoden handtere unntakene. Det gis oss kontroll over hva som har skjedd og hvordan vi vil rapporterer det.

"""
Module for reading and writing txt files
Using code must handle exceptions
"""
import sys
def getTextFile(filename):
    file=open(filename,'r',encoding='utf-8')
    res=file.read()
    file.close()
    return res
    
def storeTextFile(filename,txt):
    file=open(filename,'w',encoding='utf-8')
    file.write(txt)
    file.close()
    
# basic testing of this module 
if __name__=="__main__":
    T='unread'
    try:
        T=getTextFile("mytext.txt")
        print (T)
        try:
            storeTextFile("mycopiedtext.txt",T)
        except:
            res=sys.exc_info()
            print ('Coud not write file because: '+str(res[1]))
    except:
        res=sys.exc_info()
        print ('Coud not read file because: '+str(res[1]))

Eksempel 3

Her lar vi metodene plukke opp unntak og vi rapporterer med en tuple. Det første elementet er en indikasjon på om ting har gått bra eller dårlig. Dette gjør brukerkoden noe enklere og vi beholder kontrollen over rapprteringen.

"""
Module for reading and writing txt files
Report tuple with ok and result or error and report
"""
import sys
def getTextFile(filename):
    try:
        file=open(filename,'r',encoding='utf-8')
        res=file.read()
        file.close()
        return ('ok',res)
    except:
        res=sys.exc_info()
        return('error',res[1])
    
    
def storeTextFile(filename,txt):
    try:
        file=open(filename,'w',encoding='utf-8')
        file.write(txt)
        file.close()
        return('ok','')
    except:
        res=sys.exc_info()
        return('error',res[1])
    
# basic testing of this module 
if __name__=="__main__":
    res1=getTextFile("mytext.txt")
    if res1[0]=='ok':
        print (res1[1])
        res2=storeTextFile("mycopiedtext.txt",res1[1])
        if res2[0]=='error':
            print ('Coud not write file because: '+str(res2[1]))
    else:
        print ('Coud not read file because: '+str(res1[1]))