csv — CSV-Datei lesen und schreiben¶
Quellcode: Lib/csv.py
Das sogenannte CSV-Format (Comma Separated Values) ist das gebräuchlichste Import- und Exportformat für Tabellenkalkulationen und Datenbanken. Das CSV-Format wurde viele Jahre lang verwendet, bevor versucht wurde, das Format in einem standardisierten Weg in RFC 4180 zu beschreiben. Das Fehlen eines klar definierten Standards bedeutet, dass es oft subtile Unterschiede in den von verschiedenen Anwendungen produzierten und verarbeiteten Daten gibt. Diese Unterschiede können die Verarbeitung von CSV-Dateien aus mehreren Quellen lästig machen. Dennoch, obwohl sich die Trennzeichen und Anführungszeichen unterscheiden, ist das Gesamtformat ähnlich genug, dass es möglich ist, ein einziges Modul zu schreiben, das solche Daten effizient manipulieren kann, und die Details des Lesens und Schreibens von Daten für den Programmierer verbirgt.
Das Modul csv implementiert Klassen zum Lesen und Schreiben von Tabellendaten im CSV-Format. Es ermöglicht Programmierern zu sagen: „Schreibe diese Daten in dem von Excel bevorzugten Format“ oder „Lese Daten aus dieser Datei, die von Excel generiert wurde“, ohne die genauen Details des von Excel verwendeten CSV-Formats zu kennen. Programmierer können auch die CSV-Formate beschreiben, die von anderen Anwendungen verstanden werden, oder ihre eigenen spezialisierten CSV-Formate definieren.
Die Objekte reader und writer des Moduls csv lesen und schreiben Sequenzen. Programmierer können Daten auch in Wörterbuchform mit den Klassen DictReader und DictWriter lesen und schreiben.
Siehe auch
- PEP 305 - CSV File API
Der Python Enhancement Proposal, der diese Ergänzung zu Python vorschlug.
Modulinhalt¶
Das Modul csv definiert die folgenden Funktionen
- csv.reader(csvfile, /, dialect='excel', **fmtparams)¶
Gibt ein reader-Objekt zurück, das Zeilen aus der gegebenen csvfile verarbeitet. Eine csvfile muss ein iterierbares Objekt von Strings sein, die jeweils im definierten CSV-Format des Readers enthalten sind. Eine csvfile ist meist ein dateiähnliches Objekt oder eine Liste. Wenn csvfile ein Dateiobjekt ist, sollte es mit
newline=''geöffnet werden. [1] Ein optionaler Parameter dialect kann angegeben werden, der zur Definition einer Reihe von Parametern für einen bestimmten CSV-Dialekt verwendet wird. Er kann eine Instanz einer Unterklasse der KlasseDialectoder einer der Zeichenketten sein, die von der Funktionlist_dialects()zurückgegeben werden. Die anderen optionalen Schlüsselwortargumente fmtparams können zur Überschreibung einzelner Formatierungsparameter im aktuellen Dialekt angegeben werden. Ausführliche Informationen zu Dialekt und Formatierungsparametern finden Sie in Abschnitt Dialekte und Formatierungsparameter.Jede aus der CSV-Datei gelesene Zeile wird als Liste von Strings zurückgegeben. Es erfolgt keine automatische Datentypkonvertierung, es sei denn, die Formatierungsoption
QUOTE_NONNUMERICist angegeben (in diesem Fall werden unquoted Felder in Floats umgewandelt).Ein kurzes Anwendungsbeispiel
>>> import csv >>> with open('eggs.csv', newline='') as csvfile: ... spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') ... for row in spamreader: ... print(', '.join(row)) Spam, Spam, Spam, Spam, Spam, Baked Beans Spam, Lovely Spam, Wonderful Spam
- csv.writer(csvfile, /, dialect='excel', **fmtparams)¶
Gibt ein Writer-Objekt zurück, das für die Konvertierung der Benutzereingaben in getrennte Zeichenketten in dem angegebenen dateiähnlichen Objekt verantwortlich ist. csvfile kann jedes Objekt mit einer
write()-Methode sein. Wenn csvfile ein Dateiobjekt ist, sollte es mitnewline=''geöffnet werden [1]. Ein optionaler Parameter dialect kann angegeben werden, der zur Definition einer Reihe von Parametern für einen bestimmten CSV-Dialekt verwendet wird. Er kann eine Instanz einer Unterklasse der KlasseDialectoder einer der Zeichenketten sein, die von der Funktionlist_dialects()zurückgegeben werden. Die anderen optionalen Schlüsselwortargumente fmtparams können zur Überschreibung einzelner Formatierungsparameter im aktuellen Dialekt angegeben werden. Ausführliche Informationen zu Dialekten und Formatierungsparametern finden Sie im Abschnitt Dialekte und Formatierungsparameter. Um die Schnittstelle zu Modulen, die die DB API implementieren, so einfach wie möglich zu gestalten, wird der WertNoneals leere Zeichenkette geschrieben. Obwohl dies keine umkehrbare Transformation ist, erleichtert es das Ausgeben von SQL NULL-Datenwerten in CSV-Dateien, ohne die von einemcursor.fetch*-Aufruf zurückgegebenen Daten vorverarbeiten zu müssen. Alle anderen Nicht-String-Daten werden vor dem Schreiben mitstr()in Strings umgewandelt.Ein kurzes Anwendungsbeispiel
import csv with open('eggs.csv', 'w', newline='') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Spam'] * 5 + ['Baked Beans']) spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
- csv.register_dialect(name, /, dialect='excel', **fmtparams)¶
Ordnet dialect name zu. name muss eine Zeichenkette sein. Der Dialekt kann entweder durch Übergabe einer Unterklasse von
Dialectoder durch Schlüsselwortargumente fmtparams oder beides angegeben werden, wobei Schlüsselwortargumente die Parameter des Dialekts überschreiben. Ausführliche Informationen zu Dialekten und Formatierungsparametern finden Sie in Abschnitt Dialekte und Formatierungsparameter.
- csv.unregister_dialect(name)¶
Löscht den mit name assoziierten Dialekt aus dem Dialekt-Registry. Ein
Errorwird ausgelöst, wenn name kein registrierter Dialektname ist.
- csv.get_dialect(name)¶
Gibt den mit name assoziierten Dialekt zurück. Ein
Errorwird ausgelöst, wenn name kein registrierter Dialektname ist. Diese Funktion gibt einen unveränderlichenDialectzurück.
- csv.list_dialects()¶
Gibt die Namen aller registrierten Dialekte zurück.
- csv.field_size_limit()¶
- csv.field_size_limit(new_limit)
Gibt die aktuell vom Parser zugelassene maximale Feldgröße zurück. Wenn new_limit angegeben wird, wird dies zur neuen Grenze.
Das Modul csv definiert die folgenden Klassen
- class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)¶
Erstellt ein Objekt, das wie ein normaler Reader funktioniert, aber die Informationen in jeder Zeile einer
dictzuordnet, deren Schlüssel durch den optionalen Parameter fieldnames gegeben sind.Der Parameter fieldnames ist eine Sequenz. Wenn fieldnames weggelassen wird, werden die Werte in der ersten Zeile der Datei f als Feldnamen verwendet und aus den Ergebnissen weggelassen. Wenn fieldnames angegeben ist, werden diese verwendet und die erste Zeile wird in die Ergebnisse aufgenommen. Unabhängig davon, wie die Feldnamen ermittelt werden, behält das Wörterbuch ihre ursprüngliche Reihenfolge bei.
Wenn eine Zeile mehr Felder als Feldnamen hat, werden die verbleibenden Daten in einer Liste gesammelt und unter dem Feldnamen gespeichert, der durch restkey angegeben wird (standardmäßig
None). Wenn eine nicht leere Zeile weniger Felder als Feldnamen hat, werden die fehlenden Werte mit dem Wert von restval gefüllt (standardmäßigNone).Alle anderen optionalen oder Schlüsselwortargumente werden an die zugrunde liegende Instanz von
readerübergeben.Wenn das an fieldnames übergebene Argument ein Iterator ist, wird es in eine
listumgewandelt.Geändert in Version 3.6: Zurückgegebene Zeilen sind nun vom Typ
OrderedDict.Geändert in Version 3.8: Zurückgegebene Zeilen sind nun vom Typ
dict.Ein kurzes Anwendungsbeispiel
>>> import csv >>> with open('names.csv', newline='') as csvfile: ... reader = csv.DictReader(csvfile) ... for row in reader: ... print(row['first_name'], row['last_name']) ... Eric Idle John Cleese >>> print(row) {'first_name': 'John', 'last_name': 'Cleese'}
- class csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)¶
Erstellt ein Objekt, das wie ein normaler Writer funktioniert, aber Dictionaries auf Ausgabezeilen abbildet. Der Parameter fieldnames ist eine
Sequenzvon Schlüsseln, die die Reihenfolge identifizieren, in der Werte im Dictionary, das an die Methodewriterow()übergeben wird, in die Datei f geschrieben werden. Der optionale Parameter restval gibt den Wert an, der geschrieben werden soll, wenn im Dictionary ein Schlüssel fehlt, der nicht in fieldnames enthalten ist. Wenn das an die Methodewriterow()übergebene Dictionary einen Schlüssel enthält, der nicht in fieldnames gefunden wird, gibt der optionale Parameter extrasaction an, welche Aktion ausgeführt werden soll. Wenn er auf'raise'gesetzt ist, dem Standardwert, wird einValueErrorausgelöst. Wenn er auf'ignore'gesetzt ist, werden zusätzliche Werte im Dictionary ignoriert. Alle anderen optionalen oder Schlüsselwortargumente werden an die zugrunde liegende Instanz vonwriterübergeben.Beachten Sie, dass der Parameter fieldnames der Klasse
DictWriter, im Gegensatz zur KlasseDictReader, nicht optional ist.Wenn das an fieldnames übergebene Argument ein Iterator ist, wird es in eine
listumgewandelt.Ein kurzes Anwendungsbeispiel
import csv with open('names.csv', 'w', newline='') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'}) writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
- class csv.Dialect¶
Die Klasse
Dialectist eine Containerklasse, deren Attribute Informationen darüber enthalten, wie Doppel-Anführungszeichen, Leerzeichen, Trennzeichen usw. behandelt werden. Aufgrund des Fehlens einer strengen CSV-Spezifikation erzeugen verschiedene Anwendungen subtil unterschiedliche CSV-Daten. Instanzen vonDialectdefinieren, wie sich die Instanzen vonreaderundwriterverhalten.Alle verfügbaren Namen von
Dialectwerden vonlist_dialects()zurückgegeben, und sie können mit spezifischenreader- undwriter-Klassen über ihre Initialisierungsfunktionen (__init__) wie folgt registriert werden:import csv with open('students.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile, dialect='unix')
- class csv.excel¶
Die Klasse
exceldefiniert die üblichen Eigenschaften einer von Excel generierten CSV-Datei. Sie ist unter dem Dialektnamen'excel'registriert.
- class csv.excel_tab¶
Die Klasse
excel_tabdefiniert die üblichen Eigenschaften einer von Excel generierten TAB-getrennten Datei. Sie ist unter dem Dialektnamen'excel-tab'registriert.
- class csv.unix_dialect¶
Die Klasse
unix_dialectdefiniert die üblichen Eigenschaften einer unter UNIX-Systemen generierten CSV-Datei, d. h. mit'\n'als Zeilenabschluss und Anführungszeichen für alle Felder. Sie ist unter dem Dialektnamen'unix'registriert.Hinzugefügt in Version 3.2.
- class csv.Sniffer¶
Die Klasse
Snifferwird verwendet, um das Format einer CSV-Datei zu ermitteln.Die Klasse
Snifferbietet zwei Methoden- sniff(sample, delimiters=None)¶
Analysiert die gegebene sample und gibt eine Unterklasse von
Dialectzurück, die die gefundenen Parameter widerspiegelt. Wenn der optionale Parameter delimiters angegeben wird, wird er als Zeichenkette interpretiert, die mögliche gültige Trennzeichenzeichen enthält.
- has_header(sample)¶
Analysiert den Beispieltext (vermutlich im CSV-Format) und gibt
Truezurück, wenn die erste Zeile eine Reihe von Spaltenüberschriften zu sein scheint. Bei der Inspektion jeder Spalte werden ein oder zwei Hauptkriterien verwendet, um abzuschätzen, ob die Stichprobe eine Kopfzeile enthältdie zweite bis n-te Zeile enthält numerische Werte
die zweite bis n-te Zeile enthält Zeichenketten, bei denen mindestens die Länge eines Wertes von der des potenziellen Headers dieser Spalte abweicht.
Zwanzig Zeilen nach der ersten Zeile werden beprobt; wenn mehr als die Hälfte der Spalten + Zeilen die Kriterien erfüllt, wird
Truezurückgegeben.
Hinweis
Diese Methode ist eine grobe Heuristik und kann sowohl Falsch-Positiv- als auch Falsch-Negativ-Ergebnisse liefern.
Ein Beispiel für die Verwendung von Sniffer
with open('example.csv', newline='') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
# ... process CSV file contents here ...
Das Modul csv definiert die folgenden Konstanten
- csv.QUOTE_MINIMAL¶
Weist
writer-Objekten an, nur die Felder in Anführungszeichen zu setzen, die Sonderzeichen wie delimiter, quotechar,'\r','\n'oder eines der Zeichen in lineterminator enthalten.
- csv.QUOTE_NONNUMERIC¶
Weist
writer-Objekten an, alle nicht-numerischen Felder in Anführungszeichen zu setzen.Weist
reader-Objekten an, alle unquoted Felder in den Typfloatzu konvertieren.Hinweis
Einige numerische Typen, wie z. B.
bool,FractionoderIntEnum, haben eine Zeichenstellendarstellung, die nicht infloatkonvertiert werden kann. Sie können nicht in den ModiQUOTE_NONNUMERICundQUOTE_STRINGSgelesen werden.
- csv.QUOTE_NONE¶
Weist
writer-Objekten an, niemals Felder in Anführungszeichen zu setzen. Wenn der aktuelle delimiter, quotechar, escapechar,'\r','\n'oder eines der Zeichen in lineterminator in den Ausgabedaten vorkommt, wird ihm das aktuelle escapechar-Zeichen vorangestellt. Wenn escapechar nicht gesetzt ist, löst der Writer einenErroraus, wenn Zeichen angetroffen werden, die maskiert werden müssen. Setzen Sie quotechar aufNone, um dessen Maskierung zu verhindern.Weist
reader-Objekten an, keine spezielle Verarbeitung von Anführungszeichen durchzuführen.
- csv.QUOTE_NOTNULL¶
Weist
writer-Objekten an, alle Felder in Anführungszeichen zu setzen, die nichtNonesind. Dies ähneltQUOTE_ALL, außer dass bei einem FeldwertNoneeine leere (unquoted) Zeichenkette geschrieben wird.Weist
reader-Objekten an, ein leeres (unquoted) Feld alsNonezu interpretieren und sich ansonsten wieQUOTE_ALLzu verhalten.Hinzugefügt in Version 3.12.
- csv.QUOTE_STRINGS¶
Weist
writer-Objekten an, Felder, die Zeichenketten sind, immer in Anführungszeichen zu setzen. Dies ähneltQUOTE_NONNUMERIC, außer dass bei einem FeldwertNoneeine leere (unquoted) Zeichenkette geschrieben wird.Weist
reader-Objekten an, eine leere (unquoted) Zeichenkette alsNonezu interpretieren und sich ansonsten wieQUOTE_NONNUMERICzu verhalten.Hinzugefügt in Version 3.12.
Das Modul csv definiert die folgende Ausnahme
- exception csv.Error¶
Wird von jeder der Funktionen ausgelöst, wenn ein Fehler erkannt wird.
Dialekte und Formatierungsparameter¶
Um die Angabe des Formats von Eingabe- und Ausgabesätzen zu erleichtern, werden bestimmte Formatierungsparameter zu Dialekten zusammengefasst. Ein Dialekt ist eine Unterklasse der Klasse Dialect, die verschiedene Attribute enthält, die das Format der CSV-Datei beschreiben. Beim Erstellen von Objekten vom Typ reader oder writer kann der Programmierer eine Zeichenkette oder eine Unterklasse der Klasse Dialect als Parameter dialect angeben. Zusätzlich zu, oder anstelle von, dem Parameter dialect kann der Programmierer auch einzelne Formatierungsparameter angeben, die dieselben Namen haben wie die unten für die Klasse Dialect definierten Attribute.
Dialekte unterstützen die folgenden Attribute
- Dialect.delimiter¶
Eine ein Zeichen lange Zeichenkette, die zur Trennung von Feldern verwendet wird. Standardmäßig ist sie
','.
- Dialect.doublequote¶
Steuert, wie Instanzen von quotechar, die innerhalb eines Feldes vorkommen, selbst zitiert werden sollen. Wenn
True, wird das Zeichen verdoppelt. WennFalse, wird escapechar als Präfix für quotechar verwendet. Der Standardwert istTrue.Beim Ausgeben wird, wenn doublequote
Falseist und kein escapechar gesetzt ist,Errorausgelöst, wenn ein quotechar in einem Feld gefunden wird.
- Dialect.escapechar¶
Ein einzeicheniger String, der vom Writer verwendet wird, um Zeichen zu escapen, die ein Escaping erfordern
der delimiter, das quotechar,
'\r','\n'und alle Zeichen in lineterminator werden escapet, wenn quoting aufQUOTE_NONEgesetzt ist;das quotechar wird escapet, wenn doublequote
Falseist;das escapechar selbst.
Beim Lesen entfernt das escapechar jegliche Sonderbedeutung vom folgenden Zeichen. Der Standardwert ist
None, was das Escaping deaktiviert.Geändert in Version 3.11: Ein leeres escapechar ist nicht erlaubt.
- Dialect.lineterminator¶
Der String, der zum Beenden von Zeilen verwendet wird, die vom
writererzeugt werden. Der Standardwert ist'\r\n'.Hinweis
Der
readerist hartkodiert, um entweder'\r'oder'\n'als Zeilenende zu erkennen und ignoriert lineterminator. Dieses Verhalten kann sich in Zukunft ändern.
- Dialect.quotechar¶
Ein einzeicheniger String, der zum Zitieren von Feldern verwendet wird, die Sonderzeichen wie delimiter oder quotechar enthalten oder die Zeilenumbruchzeichen (
'\r','\n'oder beliebige Zeichen in lineterminator) enthalten. Der Standardwert ist'"'. Kann aufNonegesetzt werden, um das Escaping von'"'zu verhindern, wenn quoting aufQUOTE_NONEgesetzt ist.Geändert in Version 3.11: Ein leeres quotechar ist nicht erlaubt.
- Dialect.quoting¶
Steuert, wann Zitate vom Writer generiert und vom Reader erkannt werden sollen. Es kann einen der QUOTE_* Konstanten annehmen und hat standardmäßig
QUOTE_MINIMAL, wenn quotechar nichtNoneist, undQUOTE_NONE, andernfalls.
Reader-Objekte¶
Reader-Objekte (DictReader-Instanzen und von der Funktion reader() zurückgegebene Objekte) haben die folgenden öffentlichen Methoden.
- csvreader.__next__()¶
Gibt die nächste Zeile des iterierbaren Objekts des Readers als Liste (wenn das Objekt von
reader()zurückgegeben wurde) oder als Dictionary (wenn es sich um eineDictReader-Instanz handelt) zurück, geparst gemäß dem aktuellenDialect. Normalerweise sollte dies alsnext(reader)aufgerufen werden.
Reader-Objekte haben die folgenden öffentlichen Attribute.
- csvreader.dialect¶
Eine schreibgeschützte Beschreibung des vom Parser verwendeten Dialekts.
- csvreader.line_num¶
Die Anzahl der aus der Quell-Iterator gelesenen Zeilen. Dies ist nicht dasselbe wie die Anzahl der zurückgegebenen Datensätze, da Datensätze mehrere Zeilen umfassen können.
DictReader-Objekte haben das folgende öffentliche Attribut.
- DictReader.fieldnames¶
Wenn beim Erstellen des Objekts nicht als Parameter übergeben, wird dieses Attribut beim ersten Zugriff oder beim Lesen des ersten Datensatzes aus der Datei initialisiert.
Writer-Objekte¶
writer-Objekte (DictWriter-Instanzen und von der Funktion writer() zurückgegebene Objekte) haben die folgenden öffentlichen Methoden. Eine Zeile muss ein iterierbares Objekt aus Strings oder Zahlen sein für writer-Objekte und ein Dictionary, das Feldnamen auf Strings oder Zahlen abbildet (indem sie zuerst durch str() geleitet werden) für DictWriter-Objekte. Beachten Sie, dass komplexe Zahlen in Klammern geschrieben werden. Dies kann zu Problemen bei anderen Programmen führen, die CSV-Dateien lesen (vorausgesetzt, sie unterstützen überhaupt komplexe Zahlen).
- csvwriter.writerow(row, /)¶
Schreibt den row-Parameter in das Dateiobjekt des Writers, formatiert gemäß dem aktuellen
Dialect. Gibt den Rückgabewert des Aufrufs der write-Methode des zugrunde liegenden Dateiobjekts zurück.Geändert in Version 3.5: Unterstützung für beliebige Iterables hinzugefügt.
- csvwriter.writerows(rows, /)¶
Schreibt alle Elemente in rows (ein iterierbares Objekt von row-Objekten wie oben beschrieben) in das Dateiobjekt des Writers, formatiert gemäß dem aktuellen Dialekt.
Writer-Objekte haben das folgende öffentliche Attribut.
- csvwriter.dialect¶
Eine schreibgeschützte Beschreibung des vom Writer verwendeten Dialekts.
DictWriter-Objekte haben die folgende öffentliche Methode.
- DictWriter.writeheader()¶
Schreibt eine Zeile mit den Feldnamen (wie im Konstruktor angegeben) in das Dateiobjekt des Writers, formatiert gemäß dem aktuellen Dialekt. Gibt den Rückgabewert des intern verwendeten Aufrufs von
csvwriter.writerow()zurück.Hinzugefügt in Version 3.2.
Geändert in Version 3.8:
writeheader()gibt nun auch den Wert zurück, der von der Methodecsvwriter.writerow()zurückgegeben wird, die sie intern verwendet.
Beispiele¶
Das einfachste Beispiel zum Lesen einer CSV-Datei.
import csv
with open('some.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Lesen einer Datei mit einem alternativen Format.
import csv
with open('passwd', newline='') as f:
reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
for row in reader:
print(row)
Das entsprechende einfachste Schreibbeispiel ist
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(someiterable)
Da open() zum Öffnen einer CSV-Datei zum Lesen verwendet wird, wird die Datei standardmäßig mit der systemweiten Standardkodierung in Unicode dekodiert (siehe locale.getencoding()). Um eine Datei mit einer anderen Kodierung zu dekodieren, verwenden Sie das Argument encoding von open.
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Dasselbe gilt für das Schreiben in einer anderen Kodierung als der systemweiten Standardkodierung: Geben Sie das Argument encoding beim Öffnen der Ausgabedatei an.
Registrieren eines neuen Dialekts.
import csv
csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
with open('passwd', newline='') as f:
reader = csv.reader(f, 'unixpwd')
Eine etwas fortgeschrittenere Verwendung des Readers – Erfassen und Melden von Fehlern.
import csv, sys
filename = 'some.csv'
with open(filename, newline='') as f:
reader = csv.reader(f)
try:
for row in reader:
print(row)
except csv.Error as e:
sys.exit(f'file {filename}, line {reader.line_num}: {e}')
Und obwohl das Modul das Parsen von Strings nicht direkt unterstützt, kann es einfach gemacht werden.
import csv
for row in csv.reader(['one,two,three']):
print(row)
Fußnoten