| 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']