Tengo un archivo CSV con aproximadamente 2000 registros.
Cada registro tiene una cadena y una categoría:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
Necesito leer este archivo en una lista que se ve así:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
¿Cómo puedo importar este CSV a la lista que necesito usando Python?
csv
módulo: docs.python.org/2/library/csv.htmlRespuestas:
Usando el módulo csv :
Salida:
Si necesitas tuplas:
Salida:
Antigua respuesta de Python 2, también usando el
csv
módulo:fuente
b
hace que el archivo se abra en modo binario en lugar de modo de texto. En algunos sistemas, el modo de texto significa que\n
se convertirá en una nueva línea específica de la plataforma al leer o escribir. Ver documentos .Actualizado para Python 3 :
Salida:
fuente
'r'
es el modo predeterminado, por lo que no es necesario especificarlo. Los documentos también mencionan si csvfile es un objeto de archivo, debe abrirse con newline = ''.Pandas es bastante bueno en el manejo de datos. Aquí hay un ejemplo de cómo usarlo:
Una gran ventaja es que los pandas manejan automáticamente las filas de encabezado.
Si no has oído hablar de Seaborn , te recomiendo echarle un vistazo.
Ver también: ¿Cómo leo y escribo archivos CSV con Python?
Pandas # 2
El contenido de df es:
El contenido de los dictados es
Pandas # 3
El contenido de
lists
es:fuente
tuples = [tuple(x) for x in df.values]
se puede escribir en sutuples = list(df.itertuples(index=False))
lugar. Tenga en cuenta que los documentos de Pandas desalientan el uso de.values
a favor de.to_numpy()
. El tercer ejemplo es confuso para mí. Primero, porque se nombra la variabletuples
, lo que implicaría que es una lista de tuplas, mientras que en realidad es una lista de listas. Segundo, porque hasta donde puedo decir, esa expresión completa puede ser reemplazada pordf.to_list()
. Tampoco sé si el segundo ejemplo es realmente relevante aquí.Actualización para Python3:
Salida:
Si csvfile es un objeto de archivo, debe abrirse con
newline=''
.módulo csv
fuente
list(map())
sobre una lista de comprensión? Además, observe el espacio en blanco al comienzo de cada elemento de la segunda columna.Si está seguro de que no hay comas en su entrada, aparte de separar la categoría, puede leer la archivo línea por línea y dividir en
,
, a continuación, empuje el resultado deList
Dicho esto, parece que está viendo un archivo CSV, por lo que podría considerar usar los módulos para él
fuente
fuente
.read().splitlines()
, puede iterar sobre cada línea del archivo directamente:for line in in_file: res.append(tuple(line.rstrip().split(",")))
también, tenga en cuenta que usar.split(',')
significa que cada elemento de la segunda columna comenzará con espacios en blanco adicionales.line.rstrip()
->line.rstrip('\n')
.Como ya se dijo en los comentarios, puede usar la
csv
biblioteca en python. csv significa valores separados por comas que parece exactamente su caso: una etiqueta y un valor separados por una coma.Al ser una categoría y un tipo de valor, preferiría usar un tipo de diccionario en lugar de una lista de tuplas.
De todos modos, en el siguiente código, muestro en ambos sentidos:
d
es el diccionario yl
es la lista de tuplas.fuente
(row[0], row[1])
más débil / más propenso a errores que simplemente usartuple(row)
?Un simple bucle sería suficiente:
fuente
Lamentablemente, ninguna de las respuestas existentes me parece particularmente satisfactoria.
Aquí hay una solución simple y completa de Python 3, utilizando el módulo csv .
Note el
skipinitialspace=True
argumento. Esto es necesario ya que, desafortunadamente, el CSV de OP contiene espacios en blanco después de cada coma.Salida:
fuente
Extendiendo un poco sus requisitos y suponiendo que no le importa el orden de las líneas y desea agruparlas en categorías, la siguiente solución puede funcionar para usted:
De esta manera obtienes todas las líneas relevantes disponibles en el diccionario bajo la clave que es la categoría.
fuente
¡Aquí está la forma más fácil en Python 3.x de importar un CSV a una matriz multidimensional, y sus solo 4 líneas de código sin importar nada!
fuente
El siguiente es un fragmento de código que utiliza el módulo csv pero extrae el contenido de file.csv a una lista de dictados utilizando la primera línea, que es un encabezado de la tabla csv
fuente
csv.DictReader
?