Dialecte CSV: excel, excel_tab, unix_dialect și register_dialect() în Python

CSV Python 3.0+ (unix_dialect: 3.2+)

Seturi de reguli de format (separator, ghilimele, capăt de rând) salvate sub un nume.

Sintaxă
csv.register_dialect(nume, delimiter=";", ...)
csv.get_dialect(nume)
csv.list_dialects()
csv.unregister_dialect(nume)

Ce face Dialecte CSV: excel, excel_tab, unix_dialect și register_dialect()

Un dialect grupează opțiunile de format: delimiter, quotechar, quoting, lineterminator, escapechar, doublequote, skipinitialspace. Clasa de bază este csv.Dialect; Python are trei dialecte gata făcute: excel (virgulă, \r\n, implicit), excel_tab (tab) și unix_dialect (\n, toate valorile între ghilimele).

register_dialect() salvează un dialect propriu sub un nume, folosit apoi cu dialect="nume". get_dialect() îl returnează, list_dialects() listează numele, iar unregister_dialect() îl șterge.

Parametri

Parametru Descriere
nume Numele dialectului.
dialect / **fmtparams Un dialect existent și/sau opțiunile de format.

Ce returnează

get_dialect: un obiect dialect. list_dialects: o listă de nume.

Exemple

Exemplul 1: Dialect românesc pentru Excel

import csv, io
print(csv.list_dialects())
csv.register_dialect("excel_ro", delimiter=";", quoting=csv.QUOTE_MINIMAL)
buf = io.StringIO()
csv.writer(buf, dialect="excel_ro").writerow(["Pâine", "4,50", 20])
print(repr(buf.getvalue()))
d = csv.get_dialect("excel_ro")
print(repr(d.delimiter), repr(d.lineterminator))
csv.unregister_dialect("excel_ro")
print("excel_ro" in csv.list_dialects())

Rezultat

['excel', 'excel-tab', 'unix']
'Pâine;4,50;20\r\n'
';' '\r\n'
False

Exemplul 2: Dialectele predefinite

import csv, io
for dialect in [csv.excel, csv.excel_tab, csv.unix_dialect]:
    buf = io.StringIO()
    csv.writer(buf, dialect=dialect).writerow(["a", 1])
    print(dialect.__name__, repr(buf.getvalue()), issubclass(dialect, csv.Dialect))

Rezultat

excel 'a,1\r\n' True
excel_tab 'a\t1\r\n' True
unix_dialect '"a","1"\n' True

Greșeli frecvente

  • Folosești un dialect înainte de a-l înregistra și primești csv.Error: unknown dialect.

Comenzi înrudite

  • csv.writer(): Scrie liste de valori într-un fișier CSV, cu ghilimele puse automat unde trebuie.
  • csv.reader(): Citește un fișier CSV rând cu rând, fiecare rând ca listă de texte.
  • csv.Sniffer: Ghicește formatul unui fișier CSV necunoscut: separatorul și dacă are antet.