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', '"Отлично', ' продолжай!"']
Co widać na ekranie

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

CSVJSON
Lepiej nadaje się dlajednorodne tabele (wiersze/kolumny)struktury zagnieżdżone
Typy danychwszystko to linie tekstuZnaki 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
Otwórz praktykę →