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:

Exempel

AnropUtskriftKommentar
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 separerade 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 print.

Inläsning från konsolen: input

Allmän form

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
Inatningstexten är skriven röd.

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

Valid CSS!