Python - Como convierto un CSV en una lista de diccionarios

 
Vista:

Como convierto un CSV en una lista de diccionarios

Publicado por Daniel (4 intervenciones) el 01/08/2018 22:54:28
Buenas tardes, apenas empiezo a programar, pero ya le voy agarrando el ritmo.

Se trata de python 2.7.6

Despues de taaaanto buscar e intentar, necesito ayuda.

Tengo un archivo csv, tamaño mediano, unas 20 columnas y unos 300 registros

Como convierto el CSV en una lista de diccionarios?

Como le hago para que el titulo de cada columna quede como la clave, y el registro como valor?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.436
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como convierto un CSV en una lista de diccionarios

Publicado por xve (1644 intervenciones) el 02/08/2018 08:06:08
Hola Daniel, no se como es tu archivo CSV ni como quieres el resultado, pero una manera sencilla seria:

1
2
f=open("x.csv", "r")
lineas=f.read().splitlines()

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como convierto un CSV en una lista de diccionarios

Publicado por Daniel (4 intervenciones) el 02/08/2018 13:34:47
Gracias amigo, mejor, pero este toma todos los datos del CSV y los mete en una unica lista.
Necesito que dentro de esa lista hayan diccionarios por cada grupo de datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.436
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como convierto un CSV en una lista de diccionarios

Publicado por xve (1644 intervenciones) el 02/08/2018 19:36:08
Pero que key quieres que tenga cada columna del diccionario?? de donde saca la key?? en un archivo CSV solo hay cadenas separadas por un separador... o la primera columna tiene las keys??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como convierto un CSV en una lista de diccionarios

Publicado por Daniel (4 intervenciones) el 02/08/2018 19:39:26
Me explico un poco mejor:


Estoy trabajando en Python 2.7.6

Tengo un archivo csv de 20 columnas y 300 registros.

¿Cómo convierto el CSV en una lista de diccionarios?

¿Cómo hago para que el título de cada columna quede como la clave, y el registro como valor?

El csv tiene más colummnas y registros (+20/+300), pero pondré cuatro para que tengan una idea:

"fecha_pedido","pedido","fecha_factura_compra","factura_compra"
"13/07/2007","PED24059","13/07/2007",24052
"13/07/2007","PED24053","13/07/2007",11021
"19/10/2007","PED24060","19/10/2007",11301
"19/02/2009","PED3884","25/02/2009",17375

Lo que busco es que esto se convierta en una lista de diccionarios, así:

profit = [{'fecha_pedido': '13/07/2007', 'pedido':'PED24059',
'fecha_factura_compra': '13/07/2007' ,'factura_compra': '24052' },
{'fecha_pedido': '13/07/2007', 'pedido':'PED24053',
'fecha_factura_compra': '13/07/2007' ,'factura_compra': '11021'},
{'fecha_pedido': '13/07/2007', 'pedido':'PED24060',
'fecha_factura_compra': '13/07/2007' ,'factura_compra': '11301'},
{'fecha_pedido': '19/02/2009', 'pedido':'PED3884',
'fecha_factura_compra': '25/02/2009' ,'factura_compra': '17375'}]
De modo que pueda iterar sobre cada diccionario de cada elemento, tipo:

1
2
3
4
5
for reg in profit:
    if reg['fecha_pedido']:
        print 'hecho'
    else:
        print 'not found'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.436
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como convierto un CSV en una lista de diccionarios

Publicado por xve (1644 intervenciones) el 02/08/2018 22:27:25
Con este código creo que consigues lo que quieres, lo que tienes que hacer es quitar las comillas del archivo csv...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
 
f=open("x.csv", "r")
lineas=f.read().splitlines()
 
result=[]
keys=[]
for linea in lineas:
    if keys==[]:
        for i in linea.split(","):
            keys.append(i)
    else:
        valores=linea.split(",")
        dic={}
        for i in range(len(valores)):
            dic[keys[i]]=valores[i]
        result.append(dic)
print result

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como convierto un CSV en una lista de diccionarios

Publicado por Daniel (4 intervenciones) el 02/08/2018 22:28:54
Funcionó! Gracias un abarazooo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.126
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como convierto un CSV en una lista de diccionarios

Publicado por kip (257 intervenciones) el 03/08/2018 15:54:29
Hola, la respuesta de Xve es buena pero la idea de tener que borrar las comillas del archivo no viene bien, ademas porque las necesitaran otro tipo de software (excel) para interpretar que es un string, lo mejor es usar el modulo csv

1
2
3
4
5
6
7
8
9
10
11
>>> import csv
>>> with open('./test.csv') as csvFile:
...     csvObj = csv.DictReader(csvFile)
...     for row in csvObj:
...         print(row)
...
OrderedDict([('fecha_pedido', '13/07/2007'), ('pedido', 'PED24059'), ('fecha_factura_compra', '13/07/2007'), ('factura_compra', '24052')])
OrderedDict([('fecha_pedido', '13/07/2007'), ('pedido', 'PED24053'), ('fecha_factura_compra', '13/07/2007'), ('factura_compra', '11021')])
OrderedDict([('fecha_pedido', '19/10/2007'), ('pedido', 'PED24060'), ('fecha_factura_compra', '19/10/2007'), ('factura_compra', '11301')])
OrderedDict([('fecha_pedido', '19/02/2009'), ('pedido', 'PED3884'), ('fecha_factura_compra', '25/02/2009'), ('factura_compra', '17375')])
>>>

1
2
3
4
5
6
7
8
9
10
>>> with open('./test.csv') as csvFile:
...     csvObj = csv.DictReader(csvFile)
...     for row in csvObj:
...         print(row['fecha_pedido'])
...
13/07/2007
13/07/2007
19/10/2007
19/02/2009
>>>

https://docs.python.org/3/library/csv.html#csv.DictReader
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 2.436
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como convierto un CSV en una lista de diccionarios

Publicado por xve (1644 intervenciones) el 03/08/2018 18:14:01
Grande Kip!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar