In- och utmatning#
Programs kommunikation med ”omvärlden” kallas för ”Input/Output” eller, kort och gott, ”IO”. Med ”omvärlden” menas här bl.a. den som sitter vid datorn, lokala filer på datorn och dokument på nätet.
Utskrifter i konsolen: print
#
Allmän form#
print(v1, v2, ..., vn, sep=' ', end='\n')
Parametrar:
v1, v2, ..., vn
värden som skrivs ut.sep
anger vad som ska skilja värdena åt. Defaultvärdet är blanktecken.end
anger vad utskriften ska avslutas med. Defaultvärdet är radbyte.
Exempel#
Anrop |
Utskrift |
Kommentar |
---|---|---|
print(11, 212, 3.5)
|
11 212 3.5 |
Tre värden på en rad separerade av blanktecken och med radbyte efter. |
print(11, 212, 3.5, sep=', ')
|
11, 212, 3.5 |
Tre värden på en rad separerad av komma och blanktecken och med radbyte efter. |
print(11, 212, sep='\n')
|
11 212 |
Två värden med radbyte mellan. |
print(1/7)
|
0.14285714285714285 |
Ingen kontroll på antalet decimaler. Se formatering för kontroll av antalet decimaler. |
print('Svaret är ', end='')
print('4')
|
Svaret är 4 |
Inget radbyte efter första |
Inläsning från konsolen: input
#
Allmän form#
input()
Läser en rad tangentbordet och returnerar den som en sträng.input(prompt)
Skriver en ledtext före läsandet.
Observera att även tal returneras som strängar och måste konverteras med
int
eller float
för att kunna användas i beräkningar.
Exempel#
Koden
amount = int(input('Kapital: '))
interest = float(input('Ränta: '))
year = int(input('Antal år: '))
result = amount*(1 + interest/100)**year
print(f'Kapitalet blir {result:.2f} efter {year} år')
kan ge följande dialog:
Kapital: 1000
Ränta: 3
Antal år: 10
Kapitalet blir 1343.92 efter 10 år
Det som står efter kolon är här värden som matats in.
Läsa och skriva filer#
En fil är (i detta sammanhang) ett dokument på datorns disk. Filer har namn och är placerade någonstans i datorns filsystem. Filer används (bl a.) till att spara information mellan mer eller mindre permanent.
Man skiljer mellan text-filer och binär-filer. Textfiler innehåller huvudsakligen läsbara tecken (bokstäver, siffror, specialtecken) och har ofta en radindelning. Binära filer kan innehålla t.ex. bild eller ljud. Sådana är således inte direkt läsbara för människor utan måste tolkas av något program. Vi kommer bara behandla textfiler.
För att Python-program ska kunna skriva och/eller läsa en fil måste den öppnas. Det innebär att man kopplar ihop en Python-variabel med ett filobjekt. Man anger också om man avser läsa eller skriva filen.
Skriva en fil#
Funktionen print
som används för att skriva till terminalen kan också
användas för att skriva till filer. Detta anges med file
-parametern.
Exempel:
filename = 'homeros.txt' # Namet på den fil som ska skapas
utfil = open(filename, 'w') # 'w' anger att filen ska skrivas
print('Natten gick hän', file=utfil) # Skrivs till den öppnade file
print('och det grydde till dag', file=utfil)
print('och de seglade ständigt', file=utfil)
utfil.close() # Viktigt att stänga filen
Koden skriver 3 rader på den angivna filen (homeros.txt
) med följande
utseende:
Natten gick hän,
och det grydde till dag,
och de seglade ständigt.
(Du kan titta på den genom cat
eller type
beroende på system. Du kan
också öppna den i någon editor.)
Anmärkning: Att vi valde suffixet .txt
till filnamnet är inte
signifikant. Vi hade kunnat använda t.ex. .py
, .java
eller .html
i
stället även om det skulle kunna uppfattas som märkligt för en användare
av programmet.
Två andra metoder i filobjektet kan användas för att skriva till en fil:
write(str)
|
Skriver ett strängvärde. Ingen radindelning om strängen i sig inte innehåller radslutstecken. |
writelines(lista)
|
Skriver en lista med ett listelement per rad. |
Läsa en fil#
Metoder för läsning:
read()
|
Läser hela filen och returnerar den som en sträng. |
readline()
|
Läser och returnerar en rad. Returnerar tom sträng (’’) om alla rader lästs. |
readlines()
|
Läser alla rader och returnerar en lista med de lästa raderna. |
for line in filvariabeln:
|
Iteration över filvariabeln. Variabeln line kommer successivt innehålla alla rader i filen. |
Nedanstående kod läser filen som skapades ovan med var och en av dessa metoder. Rutan till höger visar utskrifterna.
# Läsa med read:
infil = open(filename, 'r')
print(infil.read())
infil.close()
# Läsa med readline:
infil = open(filename, 'r')
line = infil.readline()
while line != '':
print(line, end='')
line = infil.readline()
infil.close()
print()
# Läsa med readlines:
infil = open(filename, 'r')
lines = infil.readlines()
for line in lines:
print(line, end='')
infil.close()
print()
# Iteration över filvariabeln:
infil = open(filename, 'r')
for line in infil:
print(line, end='')
infil.close()
|
Natten gick hän
och det grydde till dag
och de seglade ständigt
Natten gick hän
och det grydde till dag
och de seglade ständigt
Natten gick hän
och det grydde till dag
och de seglade ständigt
Natten gick hän
och det grydde till dag
och de seglade ständigt
|
Observera att när vi läser rader (på alla sätt utom det första) får vi
med ett radslutstecken på varje inläst rad. Genom att ange end=''
undviker vi dubbel radframmatning i utskrifterna.
Satsen with
#
Det bästa sättet att öppna filer är att använda en så kallad context manager.
Exempel:
with open("test.txt", 'w') as f:
f.write(...)
...
...
...
# Slut på indentering
Då kommer filen automatiskt att stängas när man lämnar det indenterade området.
Läsning från en websida#
urllib
urlopen
read
,readline
,readlines