Solución:
Puede usar pandas (la biblioteca que se convierte en predeterminada para trabajar con marcos de datos (datos heterogéneos) en python científico) para esto. Es read_csv
puede manejar esto. De los documentos:
quotechar: cadena
The character to used to denote the start and end of a quoted item. Quoted items can include the delimiter and it will be ignored.
El valor predeterminado es "
. Un ejemplo:
In [1]: import pandas as pd
In [2]: from StringIO import StringIO
In [3]: s="""year, city, value
...: 2012, "Louisville KY", 3.5
...: 2011, "Lexington, KY", 4.0"""
In [4]: pd.read_csv(StringIO(s), quotechar=""", skipinitialspace=True)
Out[4]:
year city value
0 2012 Louisville KY 3.5
1 2011 Lexington, KY 4.0
El truco aquí es que también tienes que usar skipinitialspace=True
para tratar los espacios después del delimitador de coma.
Además de un poderoso lector de csv, también puedo recomendar encarecidamente que use pandas con los datos heterogéneos que tiene (el resultado de ejemplo en numpy que da son todas cadenas, aunque podría usar matrices estructuradas).
El problema con la coma adicional, np.genfromtxt
no se ocupa de eso.
Una solución simple es leer el archivo con csv.reader()
del módulo csv de python en una lista y luego volcarlo en una matriz numpy si lo desea.
Si realmente quieres usar np.genfromtxt
, tenga en cuenta que puede tomar iteradores en lugar de archivos, por ejemplo np.genfromtxt(my_iterator, ...)
. Entonces, puedes envolver un csv.reader
en un iterador y dárselo a np.genfromtxt
.
Eso sería algo como esto:
import csv
import numpy as np
np.genfromtxt(("t".join(i) for i in csv.reader(open('myfile.csv'))), delimiter="t")
Esto esencialmente reemplaza sobre la marcha solo las comas apropiadas con tabulaciones.
Si está utilizando un numpy, probablemente desee trabajar con numpy.ndarray. Esto le dará un numpy.ndarray:
import pandas
data = pandas.read_csv('file.csv').as_matrix()
Pandas manejará el caso “Lexington, KY” correctamente