csv 모듈을 이용한 딕셔너리 csv로 바로 저장하기

반응형
    반응형

    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)  # 데이터 쓰기

    함께보면 좋은글

    [파이썬] xlsx 파일 csv로 변환하기

    [판다스] csv불러올 때 DtypeWarning 해결방법

    [Python] 리스트 csv로 저장,불러오기

     

    댓글

    Designed by JB FACTORY

    ....