yo tengo un archivo CSV con un formato que se ve así:archivos CSV de lectura en donde numpy delimitador es ""
"FieldName1", "FieldName2", "fieldname3", "FieldName4"
"13/04/2010 14: 45: 07.008", "7.59484916392", "10", "6.552373"
"13/04/2010 14: 45: 22.010", "6.55478493312", "9", " 3.5378543"
...
en cuenta que hay dos caracteres de comillas al principio y al final de cada línea en t El archivo CSV y la cadena ","
se utilizan para delimitar campos dentro de cada línea. La cantidad de campos en el archivo CSV puede variar de un archivo a otro.
cuando trato de leer esto en numpy a través de:
import numpy as np
data = np.genfromtxt(csvfile, dtype=None, delimiter=',', names=True)
todos los datos se lee en el que los valores de cadena, rodeado por comillas dobles. No es razonable, pero no sirve de mucho para mí, ya que luego tengo que volver y convertir cada columna a su correcta tipo
Cuando uso delimiter='","'
lugar, todo funciona como me gustaría, excepto para la primera y última campos. Como el inicio de los caracteres de línea y final de línea es un carácter de comillas dobles, no se considera un delimitador válido para los campos primero y último, por lo que se leen como, por ejemplo, "04/13/2010 14:45:07.008
y 6.552373"
- tenga en cuenta los caracteres de comillas dobles iniciales y finales respectivamente. Debido a estos caracteres redundantes, numpy supone que el primer y el último campo son ambos tipos de cadena; No quiero que sea el caso
¿Hay alguna manera de instruir numpy para leer en archivos formateados de esta manera como me gustaría, sin tener que volver atrás y "arreglar" la estructura de la matriz numpy después de la lectura inicial?
El método 'str.replace ('"', '') 'debe funcionar notablemente más rápido que la expresión regular si el archivo de entrada es grande (muchos MB o GB) y será correcto si puede asumir el' 'El carácter no aparecerá en el medio de un campo, solo en los extremos. – gotgenes
Gracias Mike y gotgenes, pero debería haber mencionado que el archivo CSV tiene una cantidad variable de columnas. Probablemente podría usar el enfoque que describió al agregar un paso inicial para leer en el primer registro del archivo para determinar el número de columnas, y luego usarlo como entrada para los pasos posteriores, pero parece bastante torpe. ¿Hay una manera mejor? – monch1962
Nota minúscula: no es necesario utilizar 're.compile()' porque el uso de 're.match()' directamente almacenará en caché la expresión regular compilada de todos modos. – blokeley