Lesen Sie bestimmte Spalten in csv mit python
Ich habe eine csv-Datei, die wie folgt Aussehen:
+-----+-----+-----+-----+-----+-----+-----+-----+ | AAA | bbb | ccc | DDD | eee | FFF | GGG | hhh | +-----+-----+-----+-----+-----+-----+-----+-----+ | 1 | 2 | 3 | 4 | 50 | 3 | 20 | 4 | | 2 | 1 | 3 | 5 | 24 | 2 | 23 | 5 | | 4 | 1 | 3 | 6 | 34 | 1 | 22 | 5 | | 2 | 1 | 3 | 5 | 24 | 2 | 23 | 5 | | 2 | 1 | 3 | 5 | 24 | 2 | 23 | 5 | +-----+-----+-----+-----+-----+-----+-----+-----+
...
Wie kann ich lese nur die Spalten "AAA,DDD,FFF,GGG" in python und überspringen Sie den Header?
Die Ausgabe möchte ich eine Liste von Tupeln, die wie folgt aussieht:
[(1,4,3,20),(2,5,2,23),(4,6,1,22)]. Ich denke zum schreiben dieser Daten in ein SQLdatabase später.
Ich bezog mich auf diesen post:Lesen bestimmter Spalten aus einer csv-Datei mit dem csv-Modul?.
Aber ich glaube nicht, dass es hilfreich ist, in meinem Fall. Seit meiner .csv ist ziemlich groß mit ganze Reihe von Spalten, ich hoffe, dass ich sagen kann python den Namen der Spalten, die ich will, also python Lesen kann, dass bestimmte Spalten Zeile für Zeile für mich.
Ich denke mit split (','), um eine Liste der Header und Holen Sie sich die Indexposition der Spalte, die ich will, dann Lesen Sie die csv-Datei... Aber ich Frage mich, ob es bessere Möglichkeiten gibt, dies zu tun.
InformationsquelleAutor Ni Yan | 2013-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiel:
Es gibt mir eine Fehlermeldung
row = row_type(row[i] for i in mapping) TypeError: __new__() takes exactly 11 arguments (2 given)
Ni Yan: Es ist spät, ich bekam Niedlich, und schlüpfte in einen der interface-Unterschiede zwischen Tupel und namedtuple. Ich habe bearbeitet den code und lieferten ein Beispiel für eine interaktive Sitzung, die es verwendet.
InformationsquelleAutor Roger Pate
Merke ich die Antwort wurde akzeptiert, aber wenn Sie wirklich wollen, zu Lesen bestimmter namens Spalten aus einer csv-Datei verwenden, sollten Sie
DictReader
(wenn Sie nicht mitPandas
).Ausgabe:
InformationsquelleAutor JaminSore
with
besser ist, das file-handling. Ich bin noch immer verwendet, um mit Hilfe diesesInformationsquelleAutor Brad M
Kontext: Für diese Art von Arbeit sollten Sie die erstaunliche python-petl-Bibliothek. Das spart Ihnen eine Menge Arbeit und mögliche frustration zu tun, die Dinge "von Hand" mit der standard-csv-Modul. AFAIK sind die einzigen Personen, die noch mit dem csv-Modul sind diejenigen, die noch nicht entdeckt haben bessere tools für die Arbeit mit tabellarischen Daten (pandas, petl, etc.), das ist in Ordnung, aber wenn Sie planen, arbeiten mit einer Menge von Daten in Ihrem Karriere-aus verschiedenen fremden Quellen, etwas zu lernen, wie petl ist eine der besten Investitionen, die Sie machen können. Um begonnen zu erhalten, sollte nur 30 Minuten dauern, nachdem Sie dies getan haben pip installieren petl. Die Dokumentation ist ausgezeichnet.
Antwort: Lassen Sie uns sagen, Sie haben die erste Tabelle in eine csv-Datei (Sie können auch laden Sie Sie direkt aus der Datenbank über die petl). Dann würden Sie einfach laden Sie es und führen Sie die folgenden.
InformationsquelleAutor PeteBeat
Wenn Sie Ihre Dateien und Anforderungen sind relativ einfach und gesetzt, sobald Sie wissen, dass die gewünschten Spalten, ich würde wahrscheinlich benutzen Sie die split() aufzuteilen, um die einzelnen Daten-Zeile in eine Liste der Einträge in der Spalte:
Ich würde verwenden Sie dann die gewünschten Spalten-Indizes, um die Einträge in der Spalte aus der Liste, Prozess, jedes mit strip() entfernen whitespace-Zeichen, wandeln es in das gewünschte format (es sieht aus wie Ihre Daten integer-Werte), und erstellen Sie den Tupeln.
Wie gesagt, ich gehe davon aus, dass Ihre Anforderungen sind relativ fest. Je komplizierter oder mehr sind Sie wahrscheinlich zu ändern, desto wahrscheinlicher ist, dass es lohnt sich Ihre Zeit zu Holen, und verwenden Sie eine Bibliothek gemacht, für die Bearbeitung dieser Art von Daten.
InformationsquelleAutor BEMarshall
Alle anderen Antworten sind gut, aber ich denke, es wäre besser, nicht geladen werden alle Daten in der gleichen Zeit, da die csv-Datei könnte wirklich riesig. Ich schlage vor, mit einem generator.
Die verwendet werden können, für eine for-Schleife nach
Natürlich können Sie verbessern mit dieser Funktion erhalten Sie die Spalte-Namen statt des index. Dazu mischen Sie einfach die Brad-M-Antwort und meine.
InformationsquelleAutor Nil
Ich denke, es wird helfen.
CSV
code
Beispiel
Ergebnis
Beispiel2
result2
bild3
result3
InformationsquelleAutor s2nner