Конвертировать список словарей в CSV-файл - PullRequest
0 голосов
/ 26 августа 2018

У меня есть список словарей такого рода:

[
{'site1':'data1'},
{'site2':'data2'}
]

Как правильно создать файл csv с данными в этом порядке?:

row 1      row2
site1      data1
site2      data2

Ответы [ 4 ]

0 голосов
/ 27 августа 2018

Мне нравится использовать фрейм данных pandas, чтобы сделать мои данные и записать их в CSV-файлы

a = [{'site1':'data1'},{'site2':'data2'}]
#Get each key and values from each dictionaries in the list
keys = []
vals = []
for a1 in a:
    for k, v in a1.items():
        keys.append(k)
        vals.append(v)
#make the dataframe from the keys and values
result = pd.DataFrame({'row1': keys, 'row2':vals})
#write the data into csv, use index=False to not write the row numbers
result.to_csv("mydata.csv", index=False)
0 голосов
/ 26 августа 2018

это должно сработать:)

data = [ {'site1':'data1'}, {'site2':'data2'} ]

with open ('list.csv', 'w') as f:
    for dict in data:
        for key, value in dict.items():
            text = key+','+value+'\n'
            f.writelines(text)
0 голосов
/ 26 августа 2018

Вы должны использовать средство записи CSV, чтобы убедиться, что любые встроенные метасимволы, такие как запятые и кавычки, экранированы правильно, в противном случае данные, такие как {'site3':'data, data and more data'}, повредят файл.

import csv

my_list = [{'site1':'data1'}, {'site2':'data2'}]

with open('test.csv', 'w', newline='') as out_fp:
    writer = csv.writer(out_fp)
    for d in my_list:
        writer.writerows(d.items())

Вы можете сократить этонемного с itertools, если хотите

import itertools

with open('test.csv', 'w', newline='') as out_fp:
    csv.writer(out_fp).writerows(itertools.chain.from_iterable(
        d.items() for d in my_list))
0 голосов
/ 26 августа 2018

Переберите словари и запишите их в файл.

list_of_dicts = [{'site1':'data1'},{'site2':'data2'}]
with open('sites.csv', 'w') as file:
    file.write('row1\trow2\n')
    for dictionary in list_of_dicts:
         file.write('\t'.join(list(dictionary.items())[0]) + '\n')

output:

row1    row2
site1   data1
site2   data2

Обратите внимание, что для этого в каждом словаре должна быть только одна записьЕсли его больше, один выбирается случайным образом, а остальные игнорируются.Есть много разных способов справиться с тем, что они являются более чем одной записью в словарях, поэтому вы должны добавить ожидаемое поведение в формулировку вопроса для тех случаев, которые нужно учесть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...