티스토리 뷰

목차



    Python Logo

     

    서론

    개발자로 오래 일하면서 다양한 파일 형식을 다루는 일은 피할 수 없었습니다. 특히, CSV 파일은 데이터를 주고받을 때 가장 많이 쓰이는 형식이죠. Python에서는 CSV 파일을 읽고 쓰는 작업이 매우 쉬운 편이라 처음 접하는 개발자도 금방 익힐 수 있습니다. 실무에서도 유용하게 쓸 수 있는 CSV 다루는 법을 정리했으니, 이 기회에 기본적인 파일 입출력 방법을 확실히 다져 보세요.


    1. CSV 파일이란 무엇인가?

    CSV는 Comma Separated Values의 약자로, 데이터 항목들이 쉼표(,)로 구분된 텍스트 파일 형식입니다. 각 줄이 데이터 레코드를 나타내며, 쉼표로 나뉜 항목은 각 열에 해당하는 데이터를 나타냅니다. 예를 들어 다음과 같은 형식이 있습니다.

    이름, 나이, 직업
    철수, 25, 개발자
    영희, 30, 디자이너

    CSV는 구조가 간단하고, 데이터베이스나 스프레드시트와 호환성이 좋아 데이터를 저장하고 이동하는 데 많이 사용됩니다. Python에서는 csv 모듈을 통해 CSV 파일을 쉽게 다룰 수 있습니다. 이 모듈을 사용해 CSV 파일을 읽고 쓰는 방법을 알아보겠습니다.


    2. CSV 파일 읽기 – 다양한 파일 읽기 방법

    Python의 csv.reader를 사용하면 CSV 파일을 효율적으로 읽을 수 있습니다. 기본적으로 파일을 열고, 각 줄을 리스트로 처리할 수 있습니다. 아래에서 CSV 파일을 읽는 여러 방법을 살펴보겠습니다.

    2.1 기본적인 CSV 파일 읽기

    CSV 파일을 읽으려면 open() 함수를 사용해 파일을 열고 csv.reader 객체를 생성합니다.

    import csv
    
    # CSV 파일 열기
    with open("data.csv", mode="r", encoding="utf-8") as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)

    2.2 헤더가 있는 CSV 파일 읽기

    CSV 파일에 헤더가 있을 때는 헤더를 한 번만 읽어내고 이후 데이터를 다루는 방법이 유용합니다. next() 함수를 사용해 첫 줄을 건너뛸 수 있습니다.

    with open("data.csv", mode="r", encoding="utf-8") as file:
        reader = csv.reader(file)
        header = next(reader)  # 첫 번째 줄을 헤더로 읽음
        print("Header:", header)
        for row in reader:
            print("Data:", row)

    2.3 딕셔너리 형태로 CSV 파일 읽기 (DictReader 사용)

    CSV 파일을 딕셔너리 형태로 읽으면, 각 열 이름을 키로, 행의 값을 값으로 저장할 수 있습니다. 이 방식은 데이터에 열 이름으로 접근하기 편리합니다.

    with open("data.csv", mode="r", encoding="utf-8") as file:
        reader = csv.DictReader(file)
        for row in reader:
            print("이름:", row["이름"], "나이:", row["나이"], "직업:", row["직업"])

    2.4 구분자 변경하기

    CSV 파일이 쉼표 대신 다른 구분자로 되어 있는 경우, csv.readerdelimiter 인자를 사용해 구분자를 지정할 수 있습니다.

    with open("data_tab.csv", mode="r", encoding="utf-8") as file:
        reader = csv.reader(file, delimiter="\t")  # 탭으로 구분된 파일
        for row in reader:
            print(row)

    3. CSV 파일 쓰기 – 파일에 데이터 추가하기

    Python에서 CSV 파일에 데이터를 쓰는 방법은 간단합니다. csv.writer를 사용하면 원하는 데이터를 파일에 작성할 수 있습니다. 여러 줄의 데이터를 한꺼번에 작성할 수도 있고, 새로운 줄을 추가하는 방식으로 쓸 수도 있습니다.

    3.1 기본적인 CSV 파일 쓰기

    기본적으로 csv.writer를 사용해 새로운 파일을 생성하고 데이터를 작성할 수 있습니다. writerow() 메서드를 사용해 한 줄씩 데이터를 쓸 수 있습니다.

    with open("output.csv", mode="w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(["이름", "나이", "직업"])  # 헤더 작성
        writer.writerow(["철수", "25", "개발자"])
        writer.writerow(["영희", "30", "디자이너"])

    3.2 여러 줄의 데이터를 한 번에 쓰기 (writerows 사용)

    여러 줄의 데이터를 리스트로 만들어 한 번에 작성할 수도 있습니다. 이때 writerows()를 사용합니다.

    rows = [
        ["이름", "나이", "직업"],
        ["철수", "25", "개발자"],
        ["영희", "30", "디자이너"]
    ]
    
    with open("output.csv", mode="w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerows(rows)

    3.3 딕셔너리 데이터를 CSV 파일에 쓰기 (DictWriter 사용)

    딕셔너리 형태의 데이터를 CSV 파일에 쓰려면 csv.DictWriter를 사용하면 편리합니다. 각 열의 이름을 필드 이름으로 지정할 수 있습니다.

    with open("output_dict.csv", mode="w", newline="", encoding="utf-8") as file:
        fieldnames = ["이름", "나이", "직업"]
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        writer.writeheader()  # 헤더 작성
        writer.writerow({"이름": "철수", "나이": "25", "직업": "개발자"})
        writer.writerow({"이름": "영희", "나이": "30", "직업": "디자이너"})

    3.4 데이터 추가 모드로 파일에 쓰기

    이미 존재하는 파일에 데이터를 추가하고 싶을 때는 "a"(추가 모드)를 사용합니다. 추가 모드로 파일을 열면 기존 데이터를 유지한 채로 새로운 데이터를 파일 끝에 추가할 수 있습니다.

    with open("output.csv", mode="a", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(["민수", "27", "마케터"])  # 새로운 데이터 추가

    4. 실습 예제 – CSV 파일 읽기와 쓰기

    이제 Python의 CSV 파일 입출력 기능을 연습할 수 있는 예제를 살펴보겠습니다.

    4.1 간단한 연락처 관리 프로그램 만들기

    다음 예제는 사용자로부터 이름과 연락처를 입력받아 CSV 파일에 저장하고, 저장된 연락처를 불러와 출력하는 프로그램입니다.

    1. 연락처를 CSV 파일에 저장하기
    2. CSV 파일에서 연락처를 읽어 출력하기
    import csv
    
    def add_contact():
        name = input("이름을 입력하세요: ")
        phone = input("전화번호를 입력하세요: ")
        with open("contacts.csv", mode="a", newline="", encoding="utf-8") as file:
            writer = csv.writer(file)
            writer.writerow([name, phone])
        print("연락처가 저장되었습니다.")
    
    def view_contacts():
        with open("contacts.csv", mode="r", encoding="utf-8") as file:
            reader = csv.reader(file)
            for row in reader:
                print("이름:", row[0], "전화번호:", row[1])
    
    # 프로그램 실행
    while True:
        print("1. 연락처 추가")
        print("2. 연락처 보기")
        print("3. 종료")
        choice = input("선택: ")
        
        if choice == "1":
            add_contact()
        elif choice == "2":
            view_contacts()
        elif choice == "3":
            print("프로그램을 종료합니다.")
            break
        else:
            print("잘못된 선택입니다. 다시 시도하세요.")

    이 코드를 통해 사용자는 연락처 정보를 입력하고 저장할 수 있으며, 저장된 연락처를 확인할 수도 있습니다.

    4.2 CSV 파일 데이터 필터링

    CSV 파일에 저장된 데이터에서 특정 조건에 맞는 항목만 선택해 출력할 수도 있습니다. 예를 들어, 직업이 ‘개발자’인 사람만 출력해보겠습니다.

    with open("output.csv", mode="r", encoding="utf-8") as file:
        reader = csv.reader(file)
        next(reader)  # 헤더 건너뛰기
        for row in reader:
            if row[2] == "개발자":
                print(row)

    요약

    Python에서 CSV 파일을 다루는 방법을 알아보았습니다. CSV 파일은 데이터 관리에서 매우 유용하며, Python의 csv 모듈을 사용해 읽기와 쓰기를 쉽게 구현할 수 있습니다. 다양한 파일 읽기/쓰기 방법과 실습을 통해 파일 입출력을 더욱 깊이 이해할 수 있기를 바랍니다.