Rails Insights

루비에서 CSV 파일 파싱하기

CSV(Comma-Separated Values) 파일은 데이터를 저장하고 교환하는 데 널리 사용되는 형식입니다. 이 파일은 각 행이 레코드를 나타내고, 각 열이 필드를 나타내는 간단한 텍스트 파일입니다. 루비에서는 CSV 파일을 쉽게 읽고 쓸 수 있는 내장 라이브러리를 제공합니다. 이 글에서는 루비에서 CSV 파일을 파싱하는 방법에 대해 알아보겠습니다.

CSV 파일이란?

CSV 파일은 데이터를 표 형식으로 저장하는 간단한 방법입니다. 각 행은 데이터의 한 레코드를 나타내고, 각 열은 해당 레코드의 속성을 나타냅니다. CSV 파일은 다양한 애플리케이션에서 사용되며, 특히 스프레드시트 프로그램과 데이터베이스에서 많이 사용됩니다.

루비에서 CSV 라이브러리 사용하기

루비에서는 CSV 파일을 다루기 위해 `CSV`라는 내장 라이브러리를 제공합니다. 이 라이브러리를 사용하면 CSV 파일을 쉽게 읽고 쓸 수 있습니다. CSV 라이브러리를 사용하기 위해서는 먼저 해당 라이브러리를 불러와야 합니다.

CSV 라이브러리 불러오기

require 'csv'

이제 CSV 라이브러리를 사용할 준비가 되었습니다. 다음 단계로 CSV 파일을 읽고 데이터를 파싱하는 방법을 알아보겠습니다.

CSV 파일 읽기

CSV 파일을 읽는 것은 매우 간단합니다. `CSV.foreach` 메서드를 사용하면 파일의 각 행을 순회하면서 데이터를 처리할 수 있습니다. 다음은 CSV 파일을 읽고 각 행을 출력하는 예제입니다.

CSV.foreach("data.csv", headers: true) do |row|
  puts row.inspect
end

위의 코드에서 `data.csv`는 읽고자 하는 CSV 파일의 이름입니다. `headers: true` 옵션을 사용하면 첫 번째 행을 헤더로 간주하여 각 열에 이름을 부여합니다. `row`는 각 행을 나타내며, `inspect` 메서드를 사용하여 행의 내용을 출력합니다.

CSV 파일의 데이터 접근하기

CSV 파일의 각 행은 해시 형태로 접근할 수 있습니다. 예를 들어, 특정 열의 데이터를 가져오려면 다음과 같이 할 수 있습니다.

CSV.foreach("data.csv", headers: true) do |row|
  puts row["이름"]  # "이름" 열의 데이터 출력
end

위의 코드에서 `"이름"`은 CSV 파일의 헤더 중 하나입니다. 이와 같은 방식으로 다른 열의 데이터에도 접근할 수 있습니다.

CSV 파일 쓰기

CSV 파일에 데이터를 쓰는 것도 간단합니다. `CSV.open` 메서드를 사용하여 파일을 열고, `<<` 연산자를 사용하여 데이터를 추가할 수 있습니다. 다음은 새로운 CSV 파일을 생성하고 데이터를 쓰는 예제입니다.

CSV.open("output.csv", "w") do |csv|
  csv << ["이름", "나이", "직업"]  # 헤더 추가
  csv << ["홍길동", 30, "개발자"]
  csv << ["김철수", 25, "디자이너"]
end

위의 코드에서 `output.csv`라는 새로운 파일이 생성되고, 첫 번째 행에 헤더가 추가된 후 두 개의 데이터 행이 추가됩니다.

기존 CSV 파일에 데이터 추가하기

기존의 CSV 파일에 데이터를 추가하고 싶다면, 파일을 열 때 모드를 `"a"`로 설정하면 됩니다. 다음은 기존 CSV 파일에 데이터를 추가하는 예제입니다.

CSV.open("output.csv", "a") do |csv|
  csv << ["이영희", 28, "마케터"]
end

위의 코드에서는 `output.csv` 파일에 새로운 행이 추가됩니다.

CSV 파일의 데이터 필터링

CSV 파일에서 특정 조건을 만족하는 데이터만 필터링하여 출력할 수도 있습니다. 예를 들어, 나이가 30세 이상인 사람만 출력하는 코드는 다음과 같습니다.

CSV.foreach("data.csv", headers: true) do |row|
  if row["나이"].to_i >= 30
    puts row.inspect
  end
end

위의 코드에서 `to_i` 메서드를 사용하여 문자열을 정수로 변환한 후 조건을 비교합니다.

CSV 파일의 데이터 정렬하기

CSV 파일의 데이터를 정렬하여 출력할 수도 있습니다. 예를 들어, 나이를 기준으로 데이터를 정렬하는 코드는 다음과 같습니다.

data = CSV.read("data.csv", headers: true)
sorted_data = data.sort_by { |row| row["나이"].to_i }

sorted_data.each do |row|
  puts row.inspect
end

위의 코드에서는 `CSV.read` 메서드를 사용하여 모든 데이터를 읽어온 후, `sort_by` 메서드를 사용하여 나이를 기준으로 정렬합니다.

CSV 파일의 데이터 변환하기

CSV 파일의 데이터를 변환하여 새로운 형식으로 저장할 수도 있습니다. 예를 들어, 나이를 10년 더한 데이터를 새로운 CSV 파일로 저장하는 코드는 다음과 같습니다.

CSV.open("updated_data.csv", "w") do |csv|
  csv << ["이름", "나이", "직업"]  # 헤더 추가
  CSV.foreach("data.csv", headers: true) do |row|
    new_age = row["나이"].to_i + 10
    csv << [row["이름"], new_age, row["직업"]]
  end
end

위의 코드에서는 기존 CSV 파일의 데이터를 읽어와서 나이를 10년 더한 후, 새로운 CSV 파일에 저장합니다.

결론

루비에서 CSV 파일을 파싱하는 것은 매우 간단하고 유용한 작업입니다. 내장된 CSV 라이브러리를 사용하면 CSV 파일을 쉽게 읽고 쓸 수 있으며, 데이터를 필터링하고 정렬하는 등의 다양한 작업을 수행할 수 있습니다. 이 글에서 소개한 내용을 바탕으로 여러분의 프로젝트에서 CSV 파일을 효과적으로 활용해 보시기 바랍니다.

CSV 파일을 다루는 데 있어 추가적인 질문이나 도움이 필요하다면 언제든지 문의해 주세요. 즐거운 코딩 되세요!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.