'key: value'마다 한 줄씩 사용하여 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()
하지만 이제 모든 키가 한 행에 있고 모든 값이 다음 행에 있습니다.
제가 이런 파일을 쓸 수 있을 때, 저는 또한 그것을 새로운 사전으로 다시 읽고 싶습니다.
내 코드를 설명하기 위해, 사전에는 (wxpython을 사용하여) 텍스트ctrls 및 확인란의 값과 부울이 포함되어 있습니다."설정 저장" 및 "설정 로드" 버튼을 추가하고 싶습니다.저장 설정은 사용자가 csv 파일을 직접 편집하기 쉽게 하기 위해 언급된 방법으로 사전을 파일에 써야 하며 로드 설정은 파일에서 읽고 텍스트 ctrl 및 확인란을 업데이트해야 합니다.
그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)
꽤 컴팩트하지만 읽을 때는 어떤 유형 변환도 할 필요가 없다고 가정합니다.
옵션을 제공하기 위해 사전을 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
대신 키를 열의 이름으로 사용하려면 설명서 링크에서 확인할 수 있는 대로 기본 'orient' 매개 변수인 'columns'를 사용하십시오.
@Rabarberski의 코멘트를 고려하여, 사용할 때orient='columns
다음과 같이 데이터를 구성해야 합니다.
d = {k: [v] for k, v in mydict.items()}
가장 쉬운 방법은 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
#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
은 "를 "s"에?w.writerow(mydict)
와 같이: 과같이다음:w.writerows(mydict)
이 문제는 저에게 발생했지만 목록에서 저는 복수형 대신 단수형을 사용했습니다.
언급URL : https://stackoverflow.com/questions/8685809/writing-a-dictionary-to-a-csv-file-with-one-line-for-every-key-value
'programing' 카테고리의 다른 글
웹킷은 무엇이며 CSS와 어떤 관계가 있습니까? (0) | 2023.08.04 |
---|---|
주 스레드 체커: 백그라운드 스레드에서 호출된 UI API: -[UIApplicationapplicationState] (0) | 2023.08.04 |
안드로이드에서 장치의 IMEI/ESN을 프로그래밍 방식으로 가져오는 방법은 무엇입니까? (0) | 2023.08.04 |
MariaDB - 'AS'로 생성된 열의 기본값은 1024입니다. (0) | 2023.08.04 |
데이터베이스 1:1 관계를 사용하는 것이 타당한 시기가 있습니까? (0) | 2023.08.04 |