Ich habe eine CSV-Datei mit ungefähr 2000 Datensätzen.
Jeder Datensatz hat eine Zeichenfolge und eine Kategorie:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
Ich muss diese Datei in eine Liste einlesen, die so aussieht:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
Wie kann ich diese CSV mit Python in die Liste importieren, die ich benötige?
csv
Modul: docs.python.org/2/library/csv.htmlAntworten:
Verwenden des CSV-Moduls :
Ausgabe:
Wenn Sie Tupel benötigen:
Ausgabe:
Alte Python 2-Antwort, auch mit dem
csv
Modul:quelle
b
bewirkt , dass die Datei im Binärmodus und nicht im Textmodus geöffnet wird. Auf einigen Systemen bedeutet der Textmodus, dass er\n
beim Lesen oder Schreiben in eine plattformspezifische neue Zeile konvertiert wird. Siehe Dokumente .Aktualisiert für Python 3 :
Ausgabe:
quelle
'r'
ist der Standardmodus, daher ist die Angabe nicht erforderlich . In den Dokumenten wird auch erwähnt, dass csvfile ein Dateiobjekt ist, das mit newline = '' geöffnet werden sollte.Pandas kann ziemlich gut mit Daten umgehen . Hier ist ein Beispiel für die Verwendung:
Ein großer Vorteil ist, dass Pandas automatisch mit Kopfzeilen umgehen.
Wenn Sie noch nichts von Seaborn gehört haben , empfehle ich Ihnen , es sich anzusehen.
Siehe auch: Wie lese und schreibe ich CSV-Dateien mit Python?
Pandas # 2
Der Inhalt von df ist:
Der Inhalt von Diktaten ist
Pandas # 3
Der Inhalt von
lists
ist:quelle
tuples = [tuple(x) for x in df.values]
kann stattdessen geschriebentuples = list(df.itertuples(index=False))
werden. Beachten Sie, dass die Pandas-Dokumente von der Verwendung.values
zugunsten von abraten.to_numpy()
. Das dritte Beispiel ist für mich verwirrend. Erstens, weil die Variable benannt isttuples
, was bedeuten würde, dass es sich um eine Liste von Tupeln handelt, während es sich tatsächlich um eine Liste von Listen handelt. Zweitens, weil, soweit ich das beurteilen kann, der gesamte Ausdruck durch ersetzt werden kanndf.to_list()
. Ich weiß auch nicht, ob das zweite Beispiel hier wirklich relevant ist.Update für Python3:
Ausgabe:
Wenn csvfile ein Dateiobjekt ist, sollte es mit geöffnet werden
newline=''
.CSV-Modul
quelle
list(map())
über ein Listenverständnis verwenden? Beachten Sie auch das Leerzeichen am Anfang jedes Elements der zweiten Spalte.Wenn Sie sicher , es gibt keine Kommas in Ihrem Eingang, andere als die Kategorie zu trennen, können Sie die Datei Zeile für Zeile gelesen und aufgeteilt auf
,
, und drücken Sie dann das Ergebnis anList
Es sieht jedoch so aus, als würden Sie sich eine CSV-Datei ansehen. Sie könnten also in Betracht ziehen, die Module dafür zu verwenden
quelle
quelle
.read().splitlines()
. Sie können jede Zeile der Datei direkt durchlaufen:for line in in_file: res.append(tuple(line.rstrip().split(",")))
Beachten Sie außerdem, dass using.split(',')
bedeutet, dass jedes Element der zweiten Spalte mit einem zusätzlichen Leerzeichen beginnt.line.rstrip()
->line.rstrip('\n')
.Wie bereits in den Kommentaren erwähnt, können Sie die
csv
Bibliothek in Python verwenden. csv bedeutet durch Kommas getrennte Werte, was genau Ihr Fall zu sein scheint: eine Beschriftung und ein durch Komma getrennter Wert.Als Kategorie- und Wertetyp würde ich lieber einen Wörterbuchtyp anstelle einer Liste von Tupeln verwenden.
Wie auch immer, im folgenden Code zeige ich beide Möglichkeiten:
d
ist das Wörterbuch undl
ist die Liste der Tupel.quelle
(row[0], row[1])
schwächer / fehleranfälliger als nur zu verwendentuple(row)
?Eine einfache Schleife würde ausreichen:
quelle
Leider finde ich keine der vorhandenen Antworten besonders befriedigend.
Hier ist eine einfache und vollständige Python 3-Lösung, die das CSV- Modul verwendet.
Beachten Sie das
skipinitialspace=True
Argument. Dies ist notwendig, da die CSV von OP leider nach jedem Komma Leerzeichen enthält.Ausgabe:
quelle
Wenn Sie Ihre Anforderungen ein wenig erweitern und davon ausgehen, dass Sie sich nicht um die Reihenfolge der Zeilen kümmern und sie unter Kategorien gruppieren möchten, kann die folgende Lösung für Sie funktionieren:
Auf diese Weise erhalten Sie alle relevanten Zeilen im Wörterbuch unter Schlüssel als Kategorie.
quelle
Hier ist der einfachste Weg in Python 3.x, eine CSV in ein mehrdimensionales Array und seine nur 4 Codezeilen zu importieren, ohne etwas zu importieren!
quelle
Als nächstes folgt ein Code, der das CSV-Modul verwendet, aber den Inhalt von file.csv mithilfe der ersten Zeile, die ein Header der CSV-Tabelle ist, in eine Liste von Dikten extrahiert
quelle
csv.DictReader
?