Привет,
Имею данные в виде такого словаря:
data{"Заголовок столбца1":[значение1, значение2, значение3,...], "Заголовок столбца2":[значение1,значение2, значение3...]}
Их нужно записать в CSV, так чтобы каждая пара ключ-значение образовала столбец, где ключ - заголовок, а значение (список) - соотвественно данные под заголовком в столбец.
Пытаюсь использовать такой фрагмент, но он все лепит в строки:
with open("result.csv", mode="w", encoding='utf-8-sig') as w_file:
file_writer = csv.writer(w_file, delimiter = ";", lineterminator="\r")
file_writer.writerow(data.keys())
file_writer.writerows(data.values())
В итоге заголовки пишет правильно, а вот значения - нет.
и как я только не пытался вывести значения, все время кривь какая-то...
По идее нужно переделать словать в список списков, где каждый список будет строкой csv - для этого нужно от каждого ключа взять первое значение, записать в список-строку, потом следующее и т.д. я даже не представляю как такое итерировать.
Наверняка должен быть способ проще, как это записать в csv 1й строчкой.
Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </> Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
в модуле csv есть класс DictWriter.
Ну я бы использовал pandas потому что проще. Из той структуры данных что у вас есть легко создать dataframe и писать куда захочется хоть в csv, хоть в базу, хоть в excel и т.д.
предварительно установив pandas
import pandas as pd
df = pd.DataFrame(data)
df.to_csv('file.csv')
Плюс с этим фреймом можно работать какого только функционала для него нет. И писать куда угодно удобно. И там параметров записи сколько хочешь в методе (to_csv), отрегулировать легко.
igor6130, Я буду использовать те средства которые на уровне задачи предлагают мне наиболее широкий функционал, и требуют от меня наименьших усилий. Функционал при записи в файлы различных форматов (в том числе csv) библиотеки pandas превосходит стандартную библиотеку, тоже самое из количеством кода, с pandas это будет короче. В вопросе нигде не упомянуто, что нужно использовать только средство стандартной библиотеки.
И еще раз одна из главных причин использовать python это его экосистема.
Speakermen, Можно все вы можете создавать фреймы из csv. И потом джоинит, конкатенировать, и все что угодно. Ну и фрейм всегда можно конвертировать в словарь to_dict. pandas это серьезный инструмент для работы с табулярными данными начиная от статистических функций и заканчивая записями в различные форматы.
Максим Припадчев, ну я ж говорю, можно забивать гвозди микроскопом. И он их успешно забьет. Но все же инструменты стоит подбирать под уровень решаемой задачи. Автору библиотека Pandas совершенно ни к чему; zip с itertools прекрасно решили проблему.
igor6130, согласен особенно когда, ты не можешь ставить ничего лишнего на систему, т.к. все работает из коробки, но ты хочешь автоматизировать что то, что в Python, что в Java, всегда предлагают пакеты,фреймворки какие-то, нет кода который ты мог бы адаптировать под свой или хотя бы намека, потому что этого нет в коробке и придется писать целое приложение чтоб тебе 2 кнопки нажать(это конечно напрягает), в итоге выясняется что есть, только надо об них знать или их совместить вместе.
"Купите станок чтоб отпилить 1 раз кусок доски."
спасибо буду пробовать itertools
поскольку file_writer.writerows() - записывает СТРОКИ в CSV - т.е. должен быть список где каждый элемент это элемент столбца, т.е. [значениеА1, значениеВ1, значениеС1....],[значениеА2, значениеВ2,значениеС2...] и так далее... т.е. нужно как-то привести словарь к этому виду (без понятия как) - либо использовать какой-то другой метод работы с CSV чтобы записывать данные сразу столбцами и не построчно