csv 모듈을 이용한 딕셔너리 csv로 바로 저장하기
- Python/기초
- 2024. 6. 6.
반응형
반응형
csv 모듈을 이용한 딕셔너리 csv로 바로 저장하기
딕셔너리 자체를 csv로 넘기는 방법입니다. 사실 판다스로 하면 좋은데 그럼 데이터프레임으로 옮기는 작업이 들어가므로 가공이 들어갑니다. 이 부분을 생략하고 csv에 옮기기 위한 방법입니다.
골자는 with으로 csv를 열어서 라인별로 쓰는 방식입니다.
values 값이 한개로 되어 있는 경우
value의 타입에 따라 약간 달라지는데 문자열이나 숫자인 경우는 writerow를 이용합니다.
alphabet_count_dict = {
'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0,
'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0,
's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0
}
with open('alphabet_count.csv', 'w', newline='') as csv_file:
fieldnames = ['alphabet', 'count']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for alphabet, count in alphabet_count_dict.items():
writer.writerow({'alphabet': alphabet, 'count': count})
value가 리스트로 되어 있는 경우
value가 리스트로 되어 있는 경우 리스트의 갯수를 세서 row를 만들어 writerow를 이용해 csv에 저장합니다.
import csv
# 딕셔너리
my_dict = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago']}
# CSV 파일 경로 설정
csv_file_path = 'data.csv'
# 딕셔너리의 키를 CSV 파일의 첫 번째 행으로 쓰기
field_names = my_dict.keys()
# 딕셔너리의 값(리스트)을 CSV 파일에 쓰기
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(field_names)
# 딕셔너리의 키를 CSV 파일의 첫 번째 행으로 쓰기
# 딕셔너리의 값(리스트)을 행으로 쓰기
max_len = max(len(v) for v in my_dict.values()) # 각 리스트의 최대 길이 확인
for i in range(max_len):
row = [my_dict[key][i] if i < len(my_dict[key]) else '' for key in field_names] # 빈 값은 ''로 채움
writer.writerow(row)
단, value 마다 갯수가 다르면 무시하고 가장 짧은 리스트 갯수만큼만 저장됩니다.
csv 모듈 딕셔너리 value 리스트 길이가 다를때
value 의 리스트 length가 다르다면 DictWriter를 이용해서 진행합니다. 위와 같은 방식이지만 Writer 대신에 DictWriter로 바꿔줍니다.
import csv
# 딕셔너리 예시 (리스트의 길이가 서로 다름)
my_dict = {'Name': ['Alice', 'Bob', 'Charlie', 'Dave'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
# CSV 파일 경로 설정
csv_file_path = 'data.csv'
# 각 리스트의 최대 길이 확인
max_len = max(len(v) for v in my_dict.values())
# 딕셔너리의 키를 CSV 파일의 첫 번째 행으로 쓰기
fieldnames = my_dict.keys()
# CSV 파일에 쓸 데이터 설정
data = [{key: my_dict[key][i] if i < len(my_dict[key]) else '' for key in fieldnames} for i in range(max_len)]
# CSV 파일에 쓰기
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() # 헤더 쓰기
writer.writerows(data) # 데이터 쓰기
함께보면 좋은글
[판다스] csv불러올 때 DtypeWarning 해결방법
'Python > 기초' 카테고리의 다른 글
딕셔너리 컨프리핸션(Dictionary comprehension) (1) | 2024.12.14 |
---|---|
[파이썬] 헷갈리기 쉬운 이미지 텍스트 추출 라이브러리 pytesseract 설치하기 (4) | 2024.09.01 |
[파이썬] 리스트에서 특정 문자열 제거하기 (0) | 2024.06.03 |
파이썬에서의 ~ 연산자 : 비트 반전과 논리 NOT 연산 (0) | 2024.05.30 |
[파이썬] 리스트 같은 원소값 가져오기 (0) | 2024.05.25 |