반응형
이 사전 목록을 csv 파일로 변환하려면 어떻게 해야 합니까?
다음과 같은 사전 목록이 있습니다.
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
이를 다음과 같은 csv 파일로 변환하려면 어떻게 해야 합니까?
name,age,weight
bob,25,200
jim,31,180
import csv
to_csv = [
{'name': 'bob', 'age': 25, 'weight': 200},
{'name': 'jim', 'age': 31, 'weight': 180},
]
keys = to_csv[0].keys()
with open('people.csv', 'w', newline='') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(to_csv)
python 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
python 3에서는newline=''
파라미터를 지정하지 않으면 Excel/opencalc로 열 때 CSV에 공백줄이 표시됩니다.
다른 방법으로는: 의 csv 핸들러보다pandas
모듈.부호화 문제에 대한 내성이 높아져 파일을 로드할 때 CSV 내의 문자열 번호가 자동으로 올바른 유형(int, float 등)으로 변환됩니다.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
주의:
- 당신이 파일을 열어주면 판다들이 당신을 위해 파일을 열어줄 것이고, 디폴트로 파일을 열어줄 것입니다.
utf8
python3 및 헤더도 알아낼 수 있습니다. - 데이터 프레임은 CSV가 제공하는 구조와 동일하지 않기 때문에 로드 시 한 줄을 추가하여 동일한 것을 얻을 수 있습니다.
dataframe.to_dict('records')
- panda를 사용하면 csv 파일의 열 순서를 훨씬 쉽게 제어할 수 있습니다.기본적으로 알파벳순으로 표시되지만 열 순서를 지정할 수 있습니다.바닐라 포함
csv
모듈, 공급해야 합니다.OrderedDict
또는 임의의 순서로 표시됩니다(python< 3.5로 동작하는 경우).자세한 내용은 Python Pandars DataFrame에서 열 순서 보존을 참조하십시오.
사전 목록이 하나 있는 경우:
import csv
with open('names.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
@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 컨스트럭터는 python > 3.4의 순서만 유지합니다.순서가 중요한 경우OrderedDict([('name', 'bob'),('age',25)])
형태.
import csv
with open('file_name.csv', 'w') as csv_file:
writer = csv.writer(csv_file)
writer.writerow(('colum1', 'colum2', 'colum3'))
for key, value in dictionary.items():
writer.writerow([key, value[0], value[1]])
이것은 데이터를 .csv 파일에 쓰는 가장 간단한 방법입니다.
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)
언급URL : https://stackoverflow.com/questions/3086973/how-do-i-convert-this-list-of-dictionaries-to-a-csv-file
반응형
'programing' 카테고리의 다른 글
원칙 2: 쿼리 작성기를 사용하여 쿼리 업데이트 (0) | 2023.01.02 |
---|---|
문자열이 무작위로 보이는지, 아니면 사람이 만들어 내고 발음할 수 있는지 어떻게 확인할 수 있습니까? (0) | 2023.01.02 |
SqlAlchemy 결과를 JSON으로 시리얼화하는 방법 (0) | 2023.01.02 |
SqlAlchemy 결과를 JSON으로 시리얼화하는 방법 (0) | 2023.01.02 |
내장된 Python 함수의 소스 코드를 찾으십니까? (0) | 2023.01.02 |