Linux – Friheden til at programmere i Python: Version 1.0.20040516 – 2020-12-31 | ||
---|---|---|
forrige | Kapitel 3. Biblioteks reference | næste |
heleTeksten= open('filnavn.txt').read() # hent hele indholdet i en tekstfil alleData = open('fuldeFilsti', 'rb').read() # hent hele indholdet i en binær fil filObjekt = open('filnavn.txt') heleTeksten = filObjekt.read() filObjekt.close() listeAfAlleLinjer = filObjekt.readlinjes() listeAfAlleLinjer = filObjekt.read().splitlinjes(1) listeAfAlleLinjer = filObjekt.read().splitlinjes() listeAfAlleLinjer = filObjekt.read().split('\n') listeAfAlleLinjer = list(filObjekt) filObjekt = open('fuldeFilsti', 'rb') while 1: blok = filObjekt.read(100) if not blok: break anvend blokken (f.eks. til udskrift) filObjekt.close() for linje in open('filnavn.txt'): print linje filObjekt = open('filnavn.txt') while 1: linje = filObjekt.readlinje() if not linje: break print linje filObjekt.close()
open('filnavn.txt', 'w').write(heleTeksten) # skriv tekst til en tekstfil open('fuldeFilsti', 'wb').write(alleData) # skriv binære data til en binær fil filObjekt = open('filnavn.txt', 'w') filObjekt.write(heleTeksten) filObjekt.close() filObjekt.writelines(listeAfAlleTekststrenge) open('fuldeFilsti', 'wb').writelines(listeAfAlleDataStrenge)
import linecache fuldeFilsti = "autoexec.bat" valgteLinjenummer = 0 linjen = linecache.getline(fuldeFilsti, valgteLinjenummer) # getline er fordefineret i Python def getline(fuldeFilsti, valgteLinjenummer): if valgteLinjenummer < 1: return '' aktuelleLinjeNummer = 0 for linje in open(fuldeFilsti): aktuelleLinjeNummer += 1 if aktuelleLinjeNummer == valgteLinjenummer: return linje return '' for linje in open(fuldeFilsti).xreadlines(): print linje
import linecache fuldeFilsti = "autoexec.bat" antalLinjer = len(open(fuldeFilsti).readlines()) print antalLinjer
import sys try: udfil = open( "filnavn.txt", "w" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 ) udtekst = "" tekst = " " while len(tekst) > 0: tekst = raw_input( "Skriv tekstlinje (tom lukker fil): " ) udtekst += tekst + "\n" print >> udfil, udtekst # skriv tekst til udfil udfil.close() print "Udfilen er lukket."
Kørselsresultat:
python udfilNy.py Skriv tekstlinje (tom lukker fil): Ny tekst i ny udfil." Skriv tekstlinje (tom lukker fil): Udfilen er lukket.
Indhold i den nyoprettede filnavn.txt Ny fil i ny udfil
import sys try: indfil = open( "/usr/lib/python2.2/calendar.py", "r" ) except IOError: print >> sys.stderr, "Filen blev ikke hentet ind." sys.exit( 1 ) indtekst = indfil.read() print str(indtekst) indfil.close() print print "Filen er lukket." import sys try: udfil = open( "filnavn.txt", "wb" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 ) udtekst = "" tekst = " " while len(tekst) > 0: tekst = raw_input( "Skriv tekstlinje (tom lukker fil): " ) udtekst += tekst + "\n" print >> udfil, str(udtekst ) # skriv tekst til udfil udfil.close() print "Udfilen er lukket."
import sys try: udfil = open( "filnavn.txt", "w" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 )
liste = [1,2,3,4,5,6,7,8,9]
print >> udfil, str(liste ) # skriv liste til udfil udfil.close() print "Udfilen er lukket."
filnavn.txt kontrol viser indholdet: [1, 2, 3, 4, 5, 6, 7, 8, 9]
import sys try: udfil = open( "filnavn.txt", "a" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 ) udtekst = "" tekst = " " while len(tekst) > 0: tekst = raw_input( "Skriv tekstlinje (tom lukker fil): " ) udtekst += tekst + "\n" print >> udfil, str(udtekst ) # skriv tekst til udfil udfil.close() print "Udfilen er lukket."
import sys try: udfil = open( "filnavn.txt", "w" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 ) udtekst = "" tekst = " " while len(tekst) > 0: tekst = raw_input( "Skriv tekstlinje (tom lukker fil): " ) udtekst += tekst + "\n" print >> udfil, str(udtekst ) # skriv tekst til udfil udfil.close() print "Udfilen er lukket."
BEMÆRK: str funktionen kræves a.h.t. dansk/norske specialtegn.
Kørselsresultat: ajbo@linux:~> python indfil.py ['Microsoft får en ordentlig bredside i en ny rapport fra den amerikanske \n', 'organisation Computer & Communications Industry Association (CCIA). Manglen \n', 'på ordentlig sikkerhed i Microsofts programmer og det faktum, at Windows er \n', 'det mest udbredte styresystem i verden, betyder tilsammen, at verden generelt \n', 'er blevet mere sårbar overfor trusler mod sikkerheden, konkluderer rapporten.\n']
Filen er lukket. ajbo@linux:~>
Teksten er uddrag fra en Netavisen Infopaq mail udsendt/modtaget 24. sept 03
import sys try: udfil = open( "filnavn.txt", "wb" ) except IOError, melding: print >> sys.stderr, "Fejlmelding:", melding sys.exit( 1 ) udtekst = "" tekst = " " while len(tekst) > 0: tekst = raw_input( "Skriv tekstlinje (tom lukker fil): " ) udtekst += tekst + "\n" print >> udfil, str(udtekst ) # skriv tekst til udfil udfil.close() print "Udfilen er lukket."
Fra kørselsresultat: filnavn.txt indeholder: Nu går vi over til at udsende teksten i antal bytes. Flere bytes skrives til filen.
import sys try: indfil = open( "filnavn.txt", "rb" ) except IOError: print >> sys.stderr, "Filen blev ikke hentet ind." sys.exit( 1 ) indtekst = indfil.readlines() print str(indtekst) indfil.close() print print "Filen er lukket."
Kørselsresultat:
ajbo@linux:~> python indfilBytes.py ['Nu går vi over til at udsende teksten i antal bytes.\n', 'Flere bytes skrives til filen.\n', '\n', '\n'] Filen er lukket. ajbo@linux:~>
Til dette eksempel har jeg benyttet command.com fra Microsoft Windows Me
import sys try: indfil = open( "/windows/C/command.com", "rb" ) except IOError: print >> sys.stderr, "Filen blev ikke hentet ind." sys.exit( 1 ) indtekst = indfil.read() print str(indtekst) indfil.close() print print "Filen er lukket."
Kørselsresultat (uddrag af den store udskrift): enhed Den terminalenhed, som du vil bruge, f.eks. COM1. 1Viser eller indstiller datoen.
DATE [dato]
Skriv DATE uden parametre for at f vist den aktuelle datoindstilling og for at kunne angive en ny. Tryk p ENTER for at beholde den nuvrende dato. aSletter en eller flere filer.
I dette eksempel læses filen vinduer.jpg, der også benyttes et andet sted i bogen.
import sys try: indfil = open( "vinduer.jpg", "rb" ) except IOError: print >> sys.stderr, "Filen blev ikke hentet ind." sys.exit( 1 ) indtekst = indfil.read() print str(indtekst) indfil.close() print print "Filen er lukket."
Kørselsresultat (ganske kort uddrag af returgodset)
python indfilBytes3.py ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿUC
#!/usr/bin/env python import os, sys antalArgumenter = len(sys.argv) if not 3 <= antalArgumenter <= 5: print "Anvend: %s tekstAtFinde erstatningsTekst [indfil [udfil]]" % \ os.path.basename(sys.argv[0]) else: findeTekst = sys.argv[1] erstatteTekst = sys.argv[2] input = sys.stdin output = sys.stdout if antalArgumenter > 3: input = open(sys.argv[3]) if antalArgumenter > 4: output = open(sys.argv[4], 'w') for s in input.xreadlines(): output.write(s.replace(findeTekst, erstatteTekst)) output.close() input.close()
Et kørselsresultat: python erstatTekst.py Anvend: erstatTekst.py tekstAtFinde erstatningsTekst [indfil [udfil]]Når filen søges afviklet uden de nødvendige parametre udskrives der som vist en anvisning på, hvordan kaldet skal foregå. sys.argv[0] er selve programmets navn (erstatTekst.py). I Python bøger er det normalt at angive valgfrie parametre i firkantede parenteser. Det er altså i herværende tilfælde ikke absolut nødvendigt at angive en indfils navn, det samme er tilfældet med en udfils navn. Udeladelse af de to navne er imidlertid upraktisk i det aktuelle tilfælde, så et kald kunne være:
python erstatTekst.py "Microsoft" "Linux" "/windows/C/autoexec.bat" "autoexec.bat"Der er bare det ved det, at ordet "Microsoft" næppe forekommer i autoexec.bat filen. Resultatet vil altså alene blive at filen bliver kopieret fra Microsoft Windows biblioteket til rodbiblioteket i Linux, men det kan jo også være fint nok.
import os, sys, string indfil = open( "/windows/C/autoexec.bat", "r" ) udfil = open( "autoexec.bat", "w" ) findeTekst = "WINDOWS"; erstatteTekst = "Linux" for s in indfil.readlines(): udfil.write(string.replace(s, findeTekst, erstatteTekst)) indfil.close udfil.close
Før programafvikling: SET windir=C:\WINDOWS SET winbootdir=C:\WINDOWS SET COMSPEC=C:\WINDOWS\COMMAND.COM SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND SET PROMPT=$p$g SET TEMP=C:\WINDOWS\TEMP SET TMP=C:\WINDOWS\TEMP
Efter programafvikling: SET windir=C:\Linux SET winbootdir=C:\Linux SET COMSPEC=C:\Linux\COMMAND.COM SET PATH=C:\Linux;C:\Linux\COMMAND SET PROMPT=$p$g SET TEMP=C:\Linux\TEMP SET TMP=C:\Linux\TEMP
De to linjer: for s in indfil.readlines(): udfil.write(string.replace(s, findeTekst, erstatteTekst))
Kan også skrives: for s in indfil: udfil.write(s.replace(findeTekst, erstatteTekst))
Lad Python fortælle, hvad et modul indeholder:
>>> sys <module 'sys' (built-in)>
returstrengen fortæller, at sys er et i Python indbygget (fordefineret) modul. sys inkluderes i dette eksempel ene og alene for at kunne lukke programmet ned, når der klikkes på knappen. Herved udføres kommandoen root.exit
I interaktiv mode kan det undertiden være vanskeligt at få kørslen stoppet og komme ud af programmet. I Windows kan du komme ud ved at trykke på Ctrl og Z tasten samtidig. I Linux skulle du kunne komme ud ved at trykke samtidig på Ctrl og D. I SuSE 8.2 skal du imidlertid trykke Ctrl C for at komme ud. Men det korte og det lange er, at sys.exit og nævnte tastetryk har samme virkning.
Vi kan også få at se, hvad modulet indeholder:
>>> import sys >>> dir (sys) ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdout__', '_getframe', 'argv', 'builtin_module_names', 'byteorder', 'copyright', 'displayhook', 'dllhandle', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getdefaultencoding', 'getrecursionlimit', 'getrefcount', 'hexversion', 'last_traceback', 'last_type', 'last_value', 'maxint', 'maxunicode', 'modules', 'path', 'platform', 'prefix', 'ps1', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'version', 'version_info', 'warnoptions', 'winver']