Text- och databearbetning

Bearbeta strukturerad text och filer i praktiska tillämpningar.

Ca 50 min · del av Programmering i Python

Begrepp i lektionen

  • split()
  • strip()
  • join()
  • CSV-format

Efter den här lektionen kommer du att kunna rensa, dela upp och slå ihop strängar i Python samt läsa in och strukturerat bearbeta CSV-filer med robust felhantering.

Rensa och dela upp text: strip() och split()

När du arbetar med filhantering och extern data i Python består indata nästan alltid av oskurna strängar. Ofta innehåller raderna osynliga tecken som radbrytningar (`\n`), tabbar (`\t`) eller extra mellanslag.

Rensa bort oskurna tecken med strip()

Metoden `strip()` tar bort alla ledande och efterföljande blanksteg och styrtecken från en sträng. Om du vill ta bort tecken enbart i början eller slutet finns även `lstrip()` och `rstrip()`.

python

text = " hejsan alla\n "

rensed = text.strip()

print(rensed) # Utskrift: "hejsan alla"

Dela upp strängar med split()

För att dela upp en sammanhängande sträng till en lista med mindre delar använder du `split(separerare)`. Om inget argument anges delar `split()` på alla typer av blanksteg.

python

data_rad = "Anna;25;Göteborg"

poster = data_rad.split(";")

print(poster) # Utskrift: ['Anna', '25', 'Göteborg']

Genom att kombinera `strip()` och `split()` kan du snabbt omvandla en oren textrad från en fil till en ren lista av strängkomponenter.

Sätta samman text med join()

Motsatsen till att dela upp en sträng med `split()` är att slå ihop en lista av strängar till en enda sträng. I Python görs detta med metoden `join()`.

Syntaktisk struktur

En vanlig fälla för nybörjare är ordningen i syntaxen. Metoden `join()` anropas på avskiljaren (separatorn), och får listan som argument:

`separerare.join(lista_med_strängar)`

python

frukter = ["äpple", "banan", "citron"]

resultat = ", ".join(frukter)

print(resultat) # Utskrift: "äpple, banan, citron"

Viktigt att tänka på

Alla element i listan måste vara av typen sträng (`str`). Om listan innehåller tal måste du omvandla dem först, exempelvis med en list comprehension:

python

tal = [1, 2, 3, 4]

Detta ger TypeError: text = ",".join(tal)

Korrekt lösning:

text = ",".join(str(x) for x in tal)

print(text) # Utskrift: "1,2,3,4"

Strukturerad data: Bearbeta CSV-filer

CSV står för Comma-Separated Values och är ett av världens vanligaste textformat för tabelldata. Varje rad i filen motsvarar en rad i tabellen, och kolumnerna separeras oftast med kommatecken (`,`) eller semikolon (`;`).

Läsa in en CSV-fil rad för rad

Du kan öppna en fil i Python med `open()` och gå igenom raderna med en `for`-loop:

python

with open("produkter.csv", "r", encoding="utf-8") as file:

header = file.readline().strip().split(",") # Läser första rubrikraden

for line in file:

rad = line.strip()

if not rad:

continue # Hoppa över tomma rader

delar = rad.split(",")

produkt = delar[0]

prissats = float(delar[1]) # Konvertera sträng till flyttal

antal = int(delar[2]) # Konvertera sträng till heltal

totalt = prissats * antal

print(f"{produkt}: {totalt} kr")

Datatyper i CSV-filer

Eftersom all text i en fil läses in som strängar måste du alltid explicit typomvandla numeriska värden till `int` eller `float` innan du utför beräkningar.

Robust felhantering och renodling av data

I verkliga projekt är filer sällan helt perfekta. Det kan finnas felaktiga teckenkodningar, tomma rader, saknade kolumner eller rader där tal har ersatts med text.

Skydda koden med try-except

När du typomvandlar värden med `int()` eller `float()` kraschar programmet med `ValueError` om strängen inte är ett giltigt tal (t.ex. `float("N/A")`). Du hanterar detta med ett `try-except`-block.

Rensa alla element i en rad

Ett mycket användbart mönster är att rensa samtliga delar i en split-lista direkt med en list comprehension:

python

with open("mätdata.csv", "r", encoding="utf-8") as f:

for line_num, line in enumerate(f, 1):

# 1. Rensa raden och kontrollera om den är tom

line = line.strip()

if not line:

continue

# 2. Dela upp och rensa varje enskilt element från extra mellanslag

kolumner = [del.strip() for del in line.split(",")]

# 3. Säkerhetskontroll av antal kolumner

if len(kolumner) < 2:

print(f"Varning: Rad {line_num} saknar data.")

continue

# 4. Säker typomvandling

try:

värde = float(kolumner[1])

print(f"Sensorn {kolumner[0]}: {värde}")

except ValueError:

print(f"Fel: Kunde inte tolka talet '{kolumner[1]}' på rad {line_num}")

Hela kursen