Python: запись словаря в файл csv с одной строкой для каждого «ключа: значение»

У меня есть словарь:

mydict = {key1: value_a, key2: value_b, key3: value_c}

  • поведение python groupby?
  • Создание словаря из строки
  • Добавление более одного значения в словарь при циклическом перемещении по строке
  • Есть ли причина не отправлять super () .__ init __ () словарь вместо ** kwds?
  • Принятие словаря в качестве аргумента с помощью argparse и python
  • Группируйте и суммируйте значения списка словарей в Python
  • Я хочу записать данные в файл dict.csv в этом стиле:

     key1: value_a key2: value_b key3: value_c 

    Я написал:

     import csv f = open('dict.csv','wb') w = csv.DictWriter(f,mydict.keys()) w.writerow(mydict) f.close() 

    Но теперь у меня есть все ключи в одной строке и все значения в следующей строке.

    Когда мне удастся написать такой файл, я также хочу прочитать его в новом словаре.

    Чтобы объяснить мой код, словарь содержит значения и bools из textctrls и флажков (используя wxpython). Я хочу добавить кнопки «Сохранить настройки» и «Загрузить настройки». Параметры сохранения должны записывать словарь в файл указанным способом (чтобы пользователь мог непосредственно редактировать файл csv), параметры загрузки должны считываться из файла и обновлять текстовые поля и флажки.

  • Количество элементов Python в словаре списков
  • Метод угадывания типов данных, представленных в настоящее время в виде строк
  • Загрузка файлов Python по ссылкам, хранящимся в csv
  • Преобразовать CSV-таблицу в словарь
  • Проверьте, имеет ли файл формат CSV с Python
  • Загрузка Numy csv TOO медленнее по сравнению с Matlab
  • 6 Solutions collect form web for “Python: запись словаря в файл csv с одной строкой для каждого «ключа: значение»”

    DictWriter не работает так, как вы ожидаете.

     with open('dict.csv', 'wb') as csv_file: writer = csv.writer(csv_file) for key, value in mydict.items(): writer.writerow([key, value]) 

    Чтобы прочитать это:

     with open('dict.csv', 'rb') as csv_file: reader = csv.reader(csv_file) mydict = dict(reader) 

    который довольно компактен, но предполагает, что вам не нужно преобразовывать тип при чтении

    Самый простой способ – игнорировать модуль csv и форматировать его самостоятельно.

     with open('my_file.csv', 'w') as f: [f.write('{0},{1}\n'.format(key, value)) for key, value in my_dict.items()] 
     outfile = open( 'dict.txt', 'w' ) for key, value in sorted( mydict.items() ): outfile.write( str(key) + '\t' + str(value) + '\n' ) 

    Можете ли вы просто сделать:

     for key in mydict.keys(): f.write(str(key) + ":" + str(mydict[key]) + ","); 

    Чтобы вы могли

    key_1: значение_1, key_2: значение_2

    Я лично всегда считал модуль csv раздражающим. Я ожидаю, что кто-то еще покажет вам, как сделать это с этим, но мое быстрое и грязное решение:

     with open('dict.csv', 'w') as f: # This creates the file object for the context # below it and closes the file automatically l = [] for k, v in mydict.iteritems(): # Iterate over items returning key, value tuples l.append('%s: %s' % (str(k), str(v))) # Build a nice list of strings f.write(', '.join(l)) # Join that list of strings and write out 

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

     with open('dict.csv', 'r') as f: # Again temporary file for reading d = {} l = f.read().split(',') # Split using commas for i in l: values = i.split(': ') # Split using ': ' d[values[0]] = values[1] # Any type conversion will need to happen here 

    Чтобы дать возможность, написать словарь в файл csv можно также с помощью пакета pandas. В данном примере это может быть примерно так:

    mydict = {'key1': 'a', 'key2': 'b', 'key3': 'c'}

     import pandas as pd (pd.DataFrame.from_dict(data=mydict, orient='index'). to_csv('dict_file.csv', header=False)) 

    Главное, чтобы учесть, что параметр «orient» используется для индексации внутри метода from_dict . Это позволяет вам выбрать, хотите ли вы писать каждый словарь в новой строке.

    Кроме того, внутри метода to_csv параметр заголовка имеет значение False, чтобы иметь только словарные элементы без раздражающих строк. Вы всегда можете задать имена столбцов и индексов внутри метода to_csv.

    Результат будет выглядеть так:

     key1,a key2,b key3,c 

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

    Python - лучший язык программирования в мире.