Подтвердить что ты не робот

Написание словаря в файл csv с одной строкой для каждого "ключа: значение"

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

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

Я хочу записать данные в файл 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), параметры загрузки должны считываться из файла и обновлять текстовые поля и флажки.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

with open('my_file.csv', 'w') as f:
    [f.write('{0},{1}\n'.format(key, value)) for key, value in my_dict.items()]

Ответ 3

Просто, чтобы дать возможность, запись словаря в 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' значение 'index' внутри метода from_dict. Это позволяет вам выбрать, хотите ли вы записать каждый ключ словаря в новую строку.

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

Ваш вывод будет выглядеть так:

key1,a
key2,b
key3,c

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

Ответ 4

outfile = open( 'dict.txt', 'w' )
for key, value in sorted( mydict.items() ):
    outfile.write( str(key) + '\t' + str(value) + '\n' )

Ответ 5

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

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

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

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

Ответ 6

Я лично всегда считал модуль 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

Ответ 7

Я ноб, также опаздываю на эти комментарии, ха-ха, но вы пытались добавить "s" на: w.writerow(mydict) вот так: w.writerows(mydict), эта проблема произошла со мной, но с списков, я использовал единственное вместо множественного числа. Pops! был исправлен.

Ответ 8

import csv

dict = {"Key Header":"Value Header", "key1":"value1", "key2":"value2"}

with open("test.csv", "w") as f:
    writer = csv.writer(f)
    for i in dict:
      writer.writerow([i, dict[i]])
f.close() 

enter image description here

Ответ 9

#code to insert and read dictionary element from csv file
import csv
n=input("Enter I to insert or S to read : ")
if n=="I":
    m=int(input("Enter the number of data you want to insert: "))
    mydict={}
    list=[]
    for i in range(m):
        keys=int(input("Enter id :"))
        list.append(keys)
        values=input("Enter Name :")
        mydict[keys]=values

    with open('File1.csv',"w") as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=list)
        writer.writeheader()
        writer.writerow(mydict)
        print("Data Inserted")
else:
    keys=input("Enter Id to Search :")
    Id=str(keys)
    with open('File1.csv',"r") as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            print(row[Id]) #print(row) to display all data