#python #list #csv #dictionary #tuples
#python #Список #csv #словарь #кортежи
Вопрос:
Привет всем, у меня есть файл csv, в котором мне нужно перебирать каждую строку csv, а затем сохранять в словаре с ключом и значениями,
Ключом будет заголовок CSV
например, у меня есть одно имя CSV как csv_file_data:
sno. val-1 val-2
1 200 20
2 22 44
3 56 32
4 32 45
для этого мне нужен следующий вывод:
{'csv_file_data':[{'val-1':200,'val-2':20},{'val-1':22,'val-2':44},{'val-1':56,'val-2':32},{'val-1':32,'val-2':45}]}
Привет, братан,
data_dict=[{'csvfile1_data': [{'val-1': '0', 'val-2': '0'}, {'val-1': '0', 'val-2': '0'}]}, {'csvfile2_data': [{'val-3': '138', 'val-4': '0'}, {'val-3': '0', 'val-4': '0'}]}]
input=('input_file' [{'val-1': '100', 'val-4': '1990'}, {'val-2': '90', 'val-1': '0.0'}])
итак, в этом случае мне нужно заменить значения, присутствующие в input_file, на 1-й список
вывод, который мне был нужен:
data_dict=[{'csvfile1_data': [{'val-1': '100', 'val-2': '0'}, {'val-1': '0', 'val-2': '90'}]}, {'csvfile2_data': [{'val-3': '138', 'val-4': '1990'}, {'val-3': '0', 'val-4': '0'}]}]
Комментарии:
1. Ваш вывод имеет тип списка, потому что вы устанавливаете output = [], что означает, что у вас есть пустой список.
2. почему бы просто не использовать
csv.DictReader
?3. @Module_art оооо хорошо, поэтому мне нужен этот список в качестве значений, а csv_file_data в качестве ключа
4. @buran Я не знаю, как использовать csv.DictReader, но спасибо, я проверю это
5.
return {'csv_file_data':list_values}
?
Ответ №1:
def get_data_csv(fn):
mylist = []
with open(fn, "r") as msg:
for line in msg:
mylist.append(line.strip())
msg.close()
mydict = {}
mydict['csv_file_data'] = []
headers = mylist[0].split()
del mylist[0]
for line in mylist:
tmp_dict = {}
tmp_dict[headers[1]] = int(line.split()[1])
tmp_dict[headers[2]] = int(line.split()[2])
mydict['csv_file_data'].append(tmp_dict)
return mydict
Вы загружаете свои данные в список строк mylist.
Вы объявляете свой словарь и mydict['csv_file_data']
вводите пустой список.
Затем вы получаете свои заголовки из mylist[0].split()
.
Поскольку вам не нужно mylist[0]
, чтобы вы удаляли ее.
Вы читаете другие строки mylist
, разделяете их и загружаете во временный dict с соответствующим ключом (заголовком).
Затем вы добавляете это tmp_dict
в mydict
.
И вы получаете:
{'csv_file_data': [{'val-1': 200, 'val-2': 20}, {'val-1': 22, 'val-2': 44}, {'val-1': 56, 'val-2': 32}, {'val-1': 32, 'val-2': 45}]}
Комментарии:
1. спасибо, но я получил ошибку в этом tmp_dict[headers[1]] = line.split()[1] Ошибка индекса: список индексов вне диапазона
2. ну, я скопировал / вставил ваши данные в свой текстовый редактор и сделал это на нем. Проблем нет. Совпадают ли ваши данные с теми, которые вы опубликовали? Какой у вас текстовый редактор? Разделены ли вы пробелом, как в вашем примере?
3. Я использую pycharma, и данные csv также разные и большие, поэтому я привел пример csv
4. Хорошо, если ваш csv содержит заданное количество строк и столбцов, и если ни одно значение не пропущено, то оно должно работать. Попробуйте, возможно, .split(«,») или .split(» t»), если ваш csv разделен запятой или табуляцией вместо пробела, как в вашем примере.
5. У меня есть еще один вопрос, не могли бы вы мне помочь 🙂