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.