+ 1
I do not understand why I fail
p=1 while p<var: fieldnames[p]=input('Escribe el valor de la columna ' + str(p) + ': ') p+=1 #ERROR: IndexError: list assignment index out of range
3 Answers
+ 4
Can you provide full code??
+ 1
import csv
import json
from sys import stdout
#Fichero csv a convertir
origen=input('Inserta el nombre del fichero origen: ')
#Fichero json de destino
destino=input('Da un nombre para el fichero a generar: ')
#Ăndice que utilizaremos en kibana
indice=input('Inserta nombre del indice: ')
#Abrimos el fichero de destino
jsonfile = open(destino, 'w')
#Guardamos en cada elemento del array "lineas" cada lĂnea del fichero de origen
with open(origen,'r') as infile:
lineas = infile.readlines()
fieldnames=[]
#Pregunta al usuario si nuestro csv tiene cabecera
tienecab=input('Tiene cabecera? s/n: ')
k=0
#Si tiene cabecera, coge el primer elemento del array "lineas" y lo guarda en
if(tienecab == 's'):
for linea in lineas:
for i in linea:
if (k==0):
fieldnames=lineas
k=1
#Si no tiene cabecera, le pregunta al usuario cuantos campos tiene la cabecera y le pregunta 1 a 1
else:
numcab=input('Cuantas columnas tiene la cabecera: ')
var=int(numcab)
p=1
while p<var:
fieldnames[p]=input('Escribe el valor de la columna ' + str(p) + ': ')
p+=1
reader = csv.DictReader(fieldnames)
rowid = 0
#Va copiando lĂnea a lĂnea, con el formato de cabeceras, los datos de json, separados por una lĂnea de index
for row in reader:
jsonfile.write('{"index":{"_index":"' + indice + '","_id":' + str(rowid) + '}}\n')
json.dump(row, jsonfile)
jsonfile.write('\n')
rowid += 1
#Cierra el fichero json
jsonfile.close()
0
I think that your "fieldnames" array is filled in wrong way (or not filled).... I have doed fast read to your code but i think that this line
fieldnames=lineas
dont do whta your think