Как написать словарь Python в файл csv?
У меня есть то, что, по моему мнению, должно быть очень простой задачей, которую я не могу решить.
Как написать словарь Python в файл csv? Все, что я хочу, - это записать словарные ключи в верхнюю строку файла и значения ключа во вторую строку.
Самое близкое, что я пришел, следующее (что я получил от кого-то другого):
f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()
Проблема в том, что приведенный выше код, кажется, только пишет ключи к первой строке и что он. Я не получаю значения, записанные во вторую строку.
Любые идеи?
Ответы
Ответ 1
Вы используете DictWriter.writerows()
, который ожидает список dicts, а не dict. Вы хотите, чтобы DictWriter.writerow()
записывал одну строку.
Вы также захотите использовать DictWriter.writeheader()
, если вам нужен заголовок для вашего csv файла.
Вы также можете проверить инструкцию with
для открытия файлов. Это не только больше pythonic и readable, но и ручки закрываются для вас, даже если исключения происходят.
Пример с этими изменениями:
import csv
my_dict = {"test": 1, "testing": 2}
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
w = csv.DictWriter(f, my_dict.keys())
w.writeheader()
w.writerow(my_dict)
Что производит:
test,testing
1,2
Ответ 2
Ваш код был очень близок к работе.
Попробуйте использовать обычный csv.writer, а не DictWriter. Последний в основном используется для написания списка словарей.
Вот код, который записывает каждую пару ключ/значение в отдельной строке:
import csv
somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerows(somedict.items())
Если вместо этого вы хотите, чтобы все клавиши в одной строке и все значения на следующем, это тоже легко:
with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerow(somedict.keys())
w.writerow(somedict.values())
Pro tip. При разработке кода, как это, установите для автора w = csv.writer(sys.stderr)
, чтобы вы могли более легко увидеть, что генерируется. Когда логика будет усовершенствована, вернитесь к w = csv.writer(f)
.
Ответ 3
Зачем использовать csv для этой простой задачи?
keys,values=zip(*my_dict.items())
print >>f, ", ".join(keys)
print >>f, ", ".join(values)
f.close()
Я использую python двумя способами:
1. As a proper language where I want all software engineering principles to hold in my code.
2. As a scripting language, where I want to just get something done and the code I write for this is not meant for reuse.
Мой ответ полезен только для 2-й цели. А также считает боль помнить все эти модули и их индивидуальные функции: P