Python, usa una lista de diccionarios devueltos por una función
Estoy tratando de devolver la lista de diccionarios y luego usarla fuera de la función:
def myfunc():
fileName: some file on my system
with open(fileName) as csv1:
dataDict = csv.DictReader(csv1, delimiter=',')
return dataDict
Pero cuando llamo a la función t, aparece el error "ValueError: operación de E / S en archivo cerrado".
myDict = myfunc()
for row in myDict:
print(row)
¿Cómo debo declarar y utilizar una lista de diccionarios? Una vez que se devuelve el diccionario, también necesito acceder a sus nombres de campo. Cualquier consejo o ayuda es muy apreciado.
Respuestas
La with
declaración cierra automáticamente el archivo. Cuando intenta acceder a los datos a través del DictReader fuera de la with
declaración, DictReader no puede acceder al archivo cerrado, por lo que obtiene el IOError.
Puede evitar esto reuniendo las filas del archivo en una lista antes de regresar de la función:
def myfunc():
fileName: some file on my system
with open(fileName) as csv1:
dataDict = csv.DictReader(csv1, delimiter=',')
list_of_dicts = list(datadict)
return list_of_dicts
DictReader es vago. De hecho, conviértalo en una lista y devuélvalo, para que el archivo se lea mientras aún está abierto.
def myfunc():
fileName: some file on my system
with open(fileName) as csv:
return list(csv.DictReader(csv, delimiter=','))
Podría copiarlo en otra variable y devolver eso ...
def myfunc():
fileName: some file on my system
mydict = {}
with open(fileName) as f:
for row in csv.DictReader(f, delimiter=','):
mydict[row['first_column']] = row['second_column'] + row['third_column']
return mydict
reemplace los nombres de las columnas con los del csv.