Rust

Rust 강좌 3. CSV 파일 처리하기: 쉽고 간편한 방법

드리프트2 2024. 9. 7. 18:31

Rust로 CSV 파일 처리하기: 쉽고 간편한 방법

안녕하세요!

 

오늘은 Rust에서 CSV 파일을 처리하는 방법에 대해 알아보겠습니다.

 

많은 프로그래머들이 경력 중에 CSV 형식을 접해본 경험이 있을 텐데요.

 

재무 데이터 분석이나 웹 애플리케이션의 사용자 활동 기록을 다운로드할 수 있게 하려면 CSV 형식은 매우 유용한 방법입니다.

 

하지만 CSV는 표준화되어 있지 않기 때문에 다양한 구현에서 여러 가지 특성이 생길 수 있습니다.

 

CSV 파일 쓰기

CSV 파일을 쓰는 것은 생각보다 간단할 것 같은데요.

 

먼저, Rust에서 CSV 파일을 작성하는 방법을 살펴보겠습니다.

 

예를 들어, 아래와 같은 데이터를 CSV 파일로 저장해보겠습니다.

CSV 파일 작성 예제

use csv::Writer;

fn main() {
    let dollar_films = vec![
        ("A Fistful of Dollars", "Rojo", 1964),
        ("For a Few Dollars More", "El Indio", 1965),
        ("The Good, the Bad and the Ugly", "Tuco", 1966),
    ];

    let path = "westerns.csv"; // 생성할 CSV 파일 경로
    let mut writer = Writer::from_path(path).unwrap();

    for row in dollar_films {
        writer.encode(row).expect("CSV writer error");
    }

    writer.flush().expect("Flush error");
}

 

이 코드를 실행하면 westerns.csv라는 파일이 생성되는데요.

 

이 파일에는 주어진 영화 데이터가 저장됩니다.

 

결과 확인

생성된 westerns.csv 파일의 내용은 다음과 같습니다:

A Fistful of Dollars,Rojo,1964
For a Few Dollars More,El Indio,1965
"The Good, the Bad and the Ugly",Tuco,1966

 

이렇게 하면 벡터의 데이터를 CSV 형태로 변환하여 저장할 수 있습니다.

CSV 파일 읽기

이제 CSV 파일을 읽는 방법을 알아보겠습니다.

 

CSV 파일은 외부 데이터 소스로부터 데이터를 가져오는 데 자주 사용됩니다.

 

Rust에서는 다음과 같이 CSV 파일을 읽을 수 있습니다.

 

CSV 파일 읽기 예제

use csv::Reader;

fn main() {
    let path = "westerns.csv"; // 읽을 CSV 파일 경로
    let mut reader = Reader::from_path(path).unwrap().has_headers(false);

    for result in reader.records() {
        let record = result.expect("CSV record error");
        let title = &record[0];
        let bad_guy = &record[1];
        let year: usize = record[2].parse().expect("Year parse error");

        println!("{} was the bad guy in '{}' in {}", bad_guy, title, year);
    }
}

 

여기서 리더에게 필드 타입에 대한 힌트를 줘야 합니다.

 

만약 (String, i32, usize)로 변경한다면, 언랩은 CSV 디코드 오류로 패닉이 발생할 것입니다.

 

하지만 usizeString으로 변경하면 작동하지만, 필드를 정수로 명시적으로 파싱해야 한다는 점에 유의해야 합니다.

 

결과 확인

Rojo was the bad guy in 'A Fistful of Dollars' in 1964
El Indio was the bad guy in 'For a Few Dollars More' in 1965
Tuco was the bad guy in 'The Good, the Bad and the Ugly' in 1966

 

여기서 중요한 점은 리더가 CSV 파일의 첫 번째 행을 기본적으로 헤더로 간주한다는 것입니다.

 

이를 비활성화하려면 has_headers(false) 메서드를 사용할 수 있습니다.

 

결론

오늘은 Rust에서 CSV 파일을 읽고 쓰는 방법을 배웠습니다.

 

csv 크레이트를 활용하면 데이터를 쉽게 처리할 수 있습니다.

 

CSV 파일은 다양한 데이터 저장 및 교환에 유용한 형식이므로, Rust에서 이 기능을 잘 활용하는 것이 중요합니다.

 

이제 여러분이 Rust를 사용하여 CSV 파일을 다루는 데 자신감을 가지게 되었으면 좋겠습니다.