사전이 있습니다.
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