Ich habe eine CSV-Format-Datei bekommen, die wie folgt aussieht:Lesen von CSV-Dateien in numpy wo Trennzeichen ""
"FieldName1", "FieldName2", "FieldName3", "FieldName4"
"04/13/2010 14: 45: 07.008", "7.59484916392", "10", "6.552373"
"13.04.2010 14: 45: 22.010", "6.55478493312", "9", " 3.5378543"
...
Hinweis, dass es doppelte Anführungszeichen am Anfang und Ende jeder Zeile in t Die CSV-Datei und die Zeichenfolge ","
werden zum Abgrenzen von Feldern innerhalb jeder Zeile verwendet. Die Anzahl der Felder in der CSV-Datei kann von Datei zu Datei variieren.
Wenn ich versuche, dies in numpy zu lesen über:
import numpy as np
data = np.genfromtxt(csvfile, dtype=None, delimiter=',', names=True)
alle Daten wird als String-Werte eingelesen, umgeben von doppelten Anführungszeichen. Nicht unvernünftig, aber nicht viel zu mir, als ich dann zurück zu gehen und jede Spalte auf ihren korrekten Typ umwandeln
Wenn ich delimiter='","'
stattdessen alles funktioniert wie Ich mag würde, außer für den ersten und letzten Felder. Da der Anfang von Zeilen- und Zeilenendenzeichen ein einzelnes Anführungszeichen ist, wird dies nicht als gültiges Trennzeichen für das erste und das letzte Feld angesehen, so dass sie z. "04/13/2010 14:45:07.008
und 6.552373"
- notieren Sie die führenden und abschließenden doppelten Anführungszeichen jeweils. Aufgrund dieser redundanten Zeichen nimmt numpy an, dass die ersten und letzten Felder beide String-Typen sind; Ich will nicht, dass der Fall
Gibt es eine Möglichkeit der anweist numpy sein, Dateien zu lesen, in denen auf diese Weise formatierten, wie Ich mag würde, ohne zu haben, gehen Sie zurück und „reparieren“ die Struktur des numpy Array nach dem ersten Lesen?
Die Methode 'str.replace ('' ',' ')' sollte merklich schneller als der reguläre Ausdruck ausgeführt werden, wenn die Eingabedatei groß ist (viele MBs oder GBs) und korrekt ist, wenn Sie annehmen können. 'Charakter erscheint nicht in der Mitte eines Feldes, nur an den Enden. – gotgenes
Danke Mike und Gotgenes, aber ich hätte auch erwähnen sollen, dass die CSV-Datei eine variable Anzahl von Spalten hat. Ich könnte wahrscheinlich den Ansatz, den Sie beschrieben haben, verwenden, indem Sie einen ersten Schritt hinzufügen, um den ersten Datensatz der Datei einzulesen, um die Anzahl der Spalten zu bestimmen, und diese dann als Eingabe für spätere Schritte verwenden, aber es scheint ziemlich klobig zu sein. Gibt es einen besseren Weg? – monch1962
Kleiner Hinweis: Sie müssen 're.compile()' nicht verwenden, da nur die Verwendung von 're.match()' direkt den kompilierten regulären Ausdruck zwischenspeichert. – blokeley