Python, используйте список словарей, возвращаемых функцией
Я пытаюсь вернуть список словарей, а затем использовать его вне функции:
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)
Как мне объявить и использовать список словарей? После возврата словаря мне также нужно получить доступ к его именам полей. Любые советы или помощь приветствуются.
Ответы
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
DictReader ленив. Фактически превратите его в список и верните его, чтобы файл читался, пока он еще открыт.
def myfunc():
fileName: some file on my system
with open(fileName) as csv:
return list(csv.DictReader(csv, delimiter=','))
Вы можете скопировать его в другую переменную и вернуть это ...
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.