2010-03-05 9 views
15

Tengo archivo csv con los datos siguientesMejor manera de convertir los datos CSV a dict

val1,val2,val3 
1,2,3 
22,23,33 

Entonces, ¿cómo puedo convertir los datos en dict

dict1 = { 'val1': 1, 'val2': 2, 'val3': 3} 
dict2 = { 'val1': 22, 'val2': 23, 'val3': 33} 
fp = open('file.csv', 'r') 
reader = csv.reader(fp) 
for row in reader: 
    ???? 

, gracias

Respuesta

14

Uso csv.DictReader:

Cree un objeto que funcione como un lector normal pero ma ps la información se lee en un dict cuyas claves están dadas por el nombre de campo opcional parámetro. El fieldnames parámetro es un sequence cuyos elementos están asociados con los campos de los datos de entrada en orden. Estos elementos se convierten en las claves del diccionario resultante. Si se omite el nombre de campo parámetro, los valores en la primera fila del csvfile se utilizarán como los nombres de campo. Si la fila leída tiene más campos que la secuencia de nombres de campo, los datos restantes se agregan como una secuencia marcada con el valor de llave de reposo. Si la lectura de la fila tiene menos campos que la secuencia de nombres de campo, las claves restantes toman el valor del parámetro opcional restval. Cualesquiera otros argumentos opcionales o de palabras clave se pasan a la instancia subyacente reader ...

+0

I' Nunca lo había notado antes ... –

26
import csv 

reader = csv.DictReader(open('myfile.csv')) 
for row in reader: 
    # profit ! 
0

Lo bueno con el uso de 'csv' como se ha mencionado en otras respuestas aquí es que puede ser utilizado para la lectura de un archivo (el caso de uso obvio) pero también analiza una cadena formateada csv.

Ejemplo de lectura de un archivo csv:

import csv 
with open('my_file.csv') as f: 
    for line in csv.DictReader(f, fieldnames=('val1', 'val2', 'val3')): 
     print(line) 

aviso de que se puede pasar de forma explícita las cabeceras de los que desea ser las claves, por lo que es muy fácil de usar archivos CSV sin cabeceras.

Otro caso de uso es la lectura más que una cadena regular con 'csv'

Ejemplo:

import csv 
my_csv_string = 'val1, val2, val3' 
my_csv_dict = next(csv.DictReader(StringIO(s), fieldnames=('key1', 'key2', 'key3'))) 

De todos modos, 'csv.DictReader()' es lo que necesita ..

Cuestiones relacionadas