Python, используйте список словарей, возвращаемых функцией

Aug 19 2020

Я пытаюсь вернуть список словарей, а затем использовать его вне функции:

 def myfunc():
     fileName: some file on my system
     with open(fileName) as csv1:
         dataDict = csv.DictReader(csv1, delimiter=',')

         return dataDict    

Но когда я вызываю функцию t, я получаю сообщение об ошибке «ValueError: операция ввода-вывода для закрытого файла».

myDict = myfunc()

for row in myDict:
    print(row)

Как мне объявить и использовать список словарей? После возврата словаря мне также нужно получить доступ к его именам полей. Любые советы или помощь приветствуются.

Ответы

1 snakecharmerb Aug 19 2020 at 00:13

withОператор автоматически закрывает файл. Когда вы пытаетесь получить доступ к данным через DictReader вне withоператора, DictReader не может получить доступ к закрытому файлу, и вы получаете ошибку IOError.

Вы можете обойти это, собрав строки из файла в список перед возвратом из функции:

 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
1 superbrain Aug 18 2020 at 23:50

DictReader ленив. Фактически превратите его в список и верните его, чтобы файл читался, пока он еще открыт.

def myfunc():
     fileName: some file on my system
     with open(fileName) as csv:
         return list(csv.DictReader(csv, delimiter=','))
1 Oin Aug 18 2020 at 23:46

Вы можете скопировать его в другую переменную и вернуть это ...

 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  

замените имена столбцов на имена в CSV.