У меня есть список словарей такого рода:
[
{'site1':'data1'},
{'site2':'data2'}
]
Каким будет правильный способ генерации csv файла с данными в этом порядке? :
row 1 row2
site1 data1
site2 data2
это должно сделать трюк :)
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)
Прокрутите словари и напишите их в файл.
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')
выход:
row1 row2
site1 data1
site2 data2
Обратите внимание, что для этого требуется, чтобы каждый словарь имел только одну запись, если он имеет больше, один выбирается случайным образом, а остальные игнорируются. Существует много разных способов обработки их более чем одной записи в словарях, поэтому вы должны добавить ожидаемое поведение в вопросник для тех случаев, для которых они предназначены.
Мне нравится использовать pandas
dataframe для создания моих данных и записи их в файлы 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)
DataFrame
- это pd.DataFrame([i for a1 in a for i in a1.items()], columns=['row1', 'row2'])
Вы должны использовать 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))
\r\n
. Если данные гарантированно не содержат этих специальных символов, это работает. Но это не хорошее решение общего назначения.