[python] 모든 ‘키 : 값’에 대해 한 줄씩 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()

하지만 이제 한 행에 모든 키가 있고 다음 행에 모든 값이 있습니다.

이와 같은 파일을 작성하면 새 사전으로 다시 읽고 싶습니다.

내 코드를 설명하기 위해 사전에는 textctrl 및 확인란의 값과 bool이 포함되어 있습니다 (wxpython 사용). “설정 저장”및 “설정로드”버튼을 추가하고 싶습니다. 저장 설정은 앞서 언급 한 방식으로 파일에 사전을 작성해야하며 (사용자가 csv 파일을 직접 쉽게 편집 할 수 있도록)로드 설정은 파일에서 읽고 textctrls 및 확인란을 업데이트해야합니다.



답변

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)

매우 간결하지만 읽을 때 유형 변환을 수행 할 필요가 없다고 가정합니다.


답변

옵션을 제공하기 위해 pandas 패키지를 사용하여 csv 파일에 사전을 작성할 수도 있습니다. 주어진 예제를 사용하면 다음과 같을 수 있습니다.

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))

고려해야 할 주요 사항은 from_dict 메서드 내에서 ‘orient’매개 변수를 ‘index’로 설정하는 것입니다. 이렇게하면 각 사전 키를 새 행에 쓸 것인지 선택할 수 있습니다.

추가로 to_csv 메소드 내에서 헤더 매개 변수는 성가신 행없이 사전 요소 만 갖도록 False로 설정됩니다. to_csv 메서드 내에서 항상 열 및 인덱스 이름을 설정할 수 있습니다.

출력은 다음과 같습니다.

key1,a
key2,b
key3,c

대신 키가 열의 이름이되도록하려면 문서 링크에서 확인할 수 있으므로 ‘columns’인 기본 ‘orient’매개 변수를 사용하십시오.


답변

가장 쉬운 방법은 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 : value_1, key_2 : value_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


답변

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()

여기에 이미지 설명 입력