Python, utilisez une liste de dictionnaires renvoyés par une fonction
J'essaie de renvoyer la liste des dictionnaires puis de l'utiliser en dehors de la fonction:
def myfunc():
fileName: some file on my system
with open(fileName) as csv1:
dataDict = csv.DictReader(csv1, delimiter=',')
return dataDict
Mais lorsque j'appelle la fonction t, j'obtiens l'erreur "ValueError: opération d'E / S sur fichier fermé".
myDict = myfunc()
for row in myDict:
print(row)
Comment déclarer et utiliser une liste de dictionnaires? Une fois le dictionnaire renvoyé, je dois également accéder à ses noms de champs. Tout conseil ou aide est grandement apprécié.
Réponses
L' with
instruction ferme automatiquement le fichier. Lorsque vous essayez d'accéder aux données via le DictReader en dehors de l' with
instruction, le DictReader ne peut pas accéder au fichier fermé et vous obtenez ainsi IOError.
Vous pouvez contourner ce problème en rassemblant les lignes du fichier dans une liste avant de revenir de la fonction:
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 est paresseux. En fait, transformez-le en une liste et renvoyez-la pour que le fichier soit lu tant qu'il est encore ouvert.
def myfunc():
fileName: some file on my system
with open(fileName) as csv:
return list(csv.DictReader(csv, delimiter=','))
Vous pouvez le copier dans une autre variable et renvoyer cela ...
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
remplacez les noms des colonnes par ceux du csv.