답변:
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
편집 : 내 이전 솔루션이 주문을 처리하지 못합니다. Wilduck이 언급했듯이 DictWriter가 더 적합합니다.
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
dict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
목록에있는 모든 키를 얻으려면 (모든 키가없는 키가있는 경우)
파이썬 3에서는 상황이 약간 다르지만 훨씬 간단하고 오류가 적습니다. 그것은 당신의 파일을 열 수 있어야 CSV에게 좋은 아이디어이다 utf8
가 다른 사람에게 데이터가 더 휴대용 만들면서 (더 제한적인 인코딩을 사용하지 않는 경우를 가정처럼, 인코딩 latin1
)
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
csv
파이썬 3는 필요에 newline=''
매개 변수를, 그렇지 않으면 당신은 당신의 CSV에 빈 줄을 얻을 때 엑셀 / opencalc에서 오프닝.또는 pandas
모듈 의 csv 처리기를 선호 합니다. 인코딩 문제에 더 관대하다는 것을 알았습니다. 팬더는 파일을로드 할 때 CSV의 문자열 번호를 올바른 유형 (int, float 등)으로 자동 변환합니다.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
노트 :
utf8
하고 python3에서 기본값으로 설정 하고 헤더도 알아냅니다.dataframe.to_dict('records')
csv
모듈을 사용하면 공급해야 OrderedDict
하거나 무작위 순서로 나타납니다 (파이썬 <3.5에서 작업하는 경우). 자세한 내용 은 Python Pandas DataFrame에서 열 순서 유지를 참조하십시오 .@User와 @BiXiC는 여기에서 UTF-8에 대한 도움을 요청했기 때문에 @Matthew에 의한 솔루션의 변형입니다. (나는 논평 할 수 없으므로 대답하고 있습니다.)
import unicodecsv as csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
다음은 행 목록 (메모리에 맞지 않을 수도 있음) 또는 헤더 사본 ( write_csv
함수가 일반 일 수 있음)이 없다고 가정하는보다 일반적인 해결책입니다 .
def gen_rows():
yield OrderedDict(name='bob', age=25, weight=200)
yield OrderedDict(name='jim', age=31, weight=180)
def write_csv():
it = genrows()
first_row = it.next() # __next__ in py3
with open("people.csv", "w") as outfile:
wr = csv.DictWriter(outfile, fieldnames=list(first_row))
wr.writeheader()
wr.writerow(first_row)
wr.writerows(it)
참고 : 여기에 사용 된 OrderedDict 생성자는 파이썬> 3.4의 순서 만 유지합니다. 순서가 중요한 경우 OrderedDict([('name', 'bob'),('age',25)])
양식을 사용하십시오 .
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
header=['name','age','weight']
try:
with open('output'+str(date.today())+'.csv',mode='w',encoding='utf8',newline='') as output_to_csv:
dict_csv_writer = csv.DictWriter(output_to_csv, fieldnames=header,dialect='excel')
dict_csv_writer.writeheader()
dict_csv_writer.writerows(toCSV)
print('\nData exported to csv succesfully and sample data')
except IOError as io:
print('\n',io)