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
- Variabler, datatyper och I/O
- Operatorer och logiska uttryck
- Villkorssatser
- Slingor och iteration
- Listor och sekvenser
- Tupler och mängder
- Dictionaries
- Iteration och list comprehension
- Funktionsdefinitioner och parametrar
- Variablers räckvidd (Scope)
- Moduler och Pythons standardbibliotek
- Läsa och skriva filer
- Felhantering och undantag
- Text- och databearbetning