Rozdział 15 · Python i akta
CSV: tabele w formie tekstowej
Dane tabelowe zasługują na format, który rozumie, czym jest pole — a nie tylko separator.
Tabela w formie tekstowej
rekordy.csv
name,score,level
Anna,1200,5
Bob,900,4
CSV (comma-separated values) to prosty format tekstowy dla tabel: wiersze to rekordy, Wartości w rzędzie są rozdzielone przecinkami. Odpowiednie do eksportu do tabel, raportów, zbiorów danych.
Dlaczego NIE split( NIE,")
Debug Lab 13: CSV rozłożone przez split(„,”
csv_split_lovushka.py
stroka = 'Anna, „Świetnie, kontynuuj!”
chasti = stroka.split(",")
print(chasti)
['Anna', '"Отлично', ' продолжай!"']
Samo pole w cudzysłowie zawierało przecinek — w pełni pozwalający na to format CSV. split(",") nic nie wie o cudzysłowach w CSV i ślepo tnie po każdej przecinku, dzieląc jedno pole na dwa. XPath CSV należy analizować modułem csv, który poprawnie radzi sobie z cudzysłowami i przecinkami wewnątrz pól.
Poprawiony kod
csv_modul_pravilno.py
import csv
import io
stroka = 'Anna, „Świetnie, kontynuuj!”
reader = csv.reader(io.StringIO(stroka))
print(next(reader)) # ['Anna', 'Super, tak dalej!']
csv.reader i csv.DictReader
csv_reader.py
import csv
with open("rekordy.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.reader(f)
for row in reader:
print(row)
Dlaczego newline=„”
Dokumentacja modułu
csv zaleca otwarcie pliku za pomocą newline="", że sam moduł w pełni zarządza podziałami wierszy w polach — bez tego na niektórych platformach możliwe jest przetwarzanie podwójnej dzielnicy.csv_dictreader.py
import csv
with open("rekordy.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["name"], int(row["score"]))
Wartości CSV — zawsze łańcuch znaków, dopóki ich nie przekształcisz
row["score"] — to łańcuch znaków "1200", nie liczba 1200, nawet jeśli wizualnie wygląda jak liczba. CSV nie przechowuje informacji o typie — rzutowanie (int(...), float(...)) musisz zrobić to sam.CSV nagrań
csv_writer.py
import csv
rows = [
{"name": "Anna", "score": 1200},
{"name": "Bob", "score": 900},
]
with open("novye_rekordy.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["name", "score"])
writer.writeheader()
writer.writerows(rows)
CSV vs JSON — i CSV — nie jest Excel
| CSV | JSON | |
|---|---|---|
| Lepiej nadaje się dla | jednorodne tabele (wiersze/kolumny) | struktury zagnieżdżone |
| Typy danych | wszystko to linie tekstu | Znaki znaków, liczby, booleany, zagnieżdżanie |
CSV nie jest plikiem Excel
.csv — zwykły format tekstowy, a nie format-książka .xlsx za pomocą arkuszy, wzorów i formatowania — robią to inne, wyspecjalizowane biblioteki.Praktyka: CSV — csv.reader, DictReader, writer
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji