CSV 포매터

사용자 지정 구분자 옵션으로 CSV 데이터를 형식화하고 정규화

예시 시도

CSV 입력

형식화된 CSV

로컬에서 실행 · 시크릿 붙여넣기 안전
형식화된 CSV가 여기에 표시됩니다…
출력 구분자:

CSV 형식화란?

CSV(Comma-Separated Values) 형식화는 구분자, 인용 부호, 공백, 줄 끝이 일관된 규칙을 따르도록 원시 표 형식 텍스트를 정규화하는 과정입니다. 2005년에 발표된 RFC 4180은 가장 널리 채택된 CSV 표준을 정의합니다. 쉼표로 구분된 필드, CRLF로 끝나는 레코드, 쉼표나 큰따옴표 또는 줄바꿈을 포함하는 필드는 큰따옴표로 감쌉니다. CSV 포매터는 지저분하거나 일관성 없는 CSV 데이터를 받아 이러한 규칙에 맞게 다시 작성합니다.

실제 CSV 파일은 깔끔한 형태로 제공되는 경우가 드뭅니다. Excel, Google Sheets, 데이터베이스 덤프 유틸리티에서 내보낸 스프레드시트는 각기 다른 인용 전략을 적용하고, 공백을 다르게 처리하며, 쉼표 대신 세미콜론이나 탭을 사용할 수 있습니다. 이러한 파일을 엄격한 RFC 4180 입력을 기대하는 파서에 제공하면 깨진 행, 열 이동, 무소음 데이터 손실이 발생하는 경우가 많습니다. 처리 전에 형식화하면 이런 문제를 조기에 발견할 수 있습니다.

CSV 포매터는 CSV 변환기와 다릅니다. 형식화는 데이터를 CSV 형태로 유지합니다. 인용 부호를 정규화하고, 불필요한 공백을 제거하고, 열을 재정렬하며, 필요 시 구분자를 변경합니다. 변환은 형식 자체를 바꾸어 JSON, HTML, SQL, Markdown 출력을 생성합니다.

이 CSV 포매터를 사용하는 이유

이 도구는 브라우저에서 CSV를 파싱하고 재직렬화합니다. 데이터는 절대 기기 밖으로 나가지 않습니다.

즉시 형식화
CSV를 붙여넣으면 즉시 정리된 출력을 확인할 수 있습니다. 포매터는 입력하는 동안 브라우저에서 파싱과 재직렬화를 수행합니다.
🔒
개인정보 보호 우선 처리
모든 파싱과 형식화는 브라우저 탭에서 이루어집니다. 네트워크를 통해 전송되는 데이터가 없습니다. 기기 밖으로 나가면 안 되는 독점 데이터셋, 자격 증명, 개인 식별 정보에도 안전합니다.
🔧
구분자 설정
쉼표, 탭, 세미콜론, 파이프 구분자 간에 전환할 수 있습니다. 도구는 입력 구분자를 자동으로 감지하고, 출력에 다른 구분자를 선택할 수 있어 형식 간 정규화가 간단합니다.
📋
원클릭 복사 및 다운로드
형식화된 CSV를 클립보드에 복사하거나 파일로 다운로드합니다. 추가 편집 없이 데이터베이스, 스프레드시트, 데이터 파이프라인으로 바로 가져올 수 있습니다.

CSV 포매터 활용 사례

프론트엔드 개발
React 또는 Vue 컴포넌트에서 모의 데이터로 사용하는 CSV 픽스처 파일을 정리합니다. 일관된 인용 부호는 개발 빌드 중 파싱 실패를 방지합니다.
백엔드 데이터 수집
서드파티 API에서 내보낸 CSV를 ETL 파이프라인에 제공하기 전에 정규화합니다. 공백 제거와 구분자 표준화로 열 이동 버그를 방지합니다.
DevOps 및 CI/CD
버전 관리에 커밋된 CSV 설정 파일이나 시드 데이터를 형식화합니다. 일관된 형식은 diff 노이즈를 줄이고 코드 리뷰를 더 빠르게 만듭니다.
QA 및 테스팅
알려진 인용 부호와 구분자 패턴으로 CSV 테스트 픽스처를 준비합니다. 재현 가능한 입력 파일은 파서 출력에 대한 검증 작성을 더 쉽게 만듭니다.
데이터 엔지니어링
레거시 데이터베이스의 CSV 덤프를 현대적인 데이터 웨어하우스에 로드하기 전에 전처리합니다. 인용 부호 문제와 구분자 불일치를 수정하면 디버깅 시간을 절약할 수 있습니다.
학습 및 교육
다양한 입력을 붙여넣고 포매터가 어떻게 정규화하는지 관찰하여 RFC 4180 인용 규칙을 실험합니다. CSV 엣지 케이스를 이해하는 실용적인 방법입니다.

CSV 인용 및 이스케이프 규칙 (RFC 4180)

RFC 4180은 필드를 언제, 어떻게 인용해야 하는지에 대한 구체적인 규칙을 정의합니다. 아래 여섯 가지 시나리오는 인용 동작이 중요한 경우를 다룹니다.

시나리오예시규칙
Field contains delimitername,"Smith, Jr."Wrap in double quotes
Field contains newline"line1\nline2"Wrap in double quotes
Field contains double quote"She said ""hello"""Double the quote character
Field is empty,,Two consecutive delimiters
Field has leading spaces" value"Quotes preserve whitespace
Field is numeric42No quotes required unless forced

CSV 구분자 비교

구분자 선택은 호환성, 가독성, 인용 필드가 필요한 빈도에 영향을 미칩니다.

쉼표 (,)
RFC 4180 기본값입니다. 모든 CSV 파서와 스프레드시트에서 지원합니다. 필드 값에 쉼표가 포함될 때 인용이 필요하며, 주소 및 텍스트 데이터에서 흔합니다.
탭 (\t)
TSV(Tab-Separated Values) 파일에 사용됩니다. 탭 문자는 필드 데이터에 거의 나타나지 않아 인용이 거의 필요 없습니다. 생물정보학과 데이터베이스 내보내기에서 일반적입니다.
세미콜론 (;)
쉼표가 소수점 구분자로 사용되는 유럽 로케일(독일, 프랑스, 브라질) CSV 내보내기에서 표준입니다. 시스템 로케일이 쉼표 소수점을 사용하면 Excel은 세미콜론을 사용합니다.
파이프 (|)
자연어 텍스트에서 드물어, 필드 값에 쉼표와 세미콜론이 나타나는 지저분한 데이터에 적합합니다. 메인프레임 및 레거시 시스템 내보내기에서 일반적입니다.

코드 예제

다양한 언어에서 지저분한 CSV를 파싱하고 일관된 형식으로 재직렬화하는 방법을 보여주는 예제입니다. 각 코드 조각은 공백 제거, 구분자 정규화, 인용 부호 처리를 다룹니다.

JavaScript (Node.js)
import { parse, unparse } from 'papaparse'

const messy = `name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo "`

// Parse with trimming, then re-serialize with consistent formatting
const parsed = parse(messy, {
  header: true,
  skipEmptyLines: true,
  transformHeader: h => h.trim(),
  transform: v => v.trim(),
})

const clean = unparse(parsed.data, { quotes: true })
console.log(clean)
// → "name","age","city"
// → "Alice","30","Berlin"
// → "Bob","25","Tokyo"
Python
import csv
import io

messy = """name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo " """

reader = csv.DictReader(io.StringIO(messy), skipinitialspace=True)
output = io.StringIO()
writer = csv.DictWriter(
    output,
    fieldnames=[f.strip() for f in reader.fieldnames],
    quoting=csv.QUOTE_ALL,
)
writer.writeheader()
for row in reader:
    writer.writerow({k.strip(): v.strip() for k, v in row.items()})

print(output.getvalue())
# → "name","age","city"
# → "Alice","30","Berlin"
# → "Bob","25","Tokyo"
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()

	var buf strings.Builder
	w := csv.NewWriter(&buf)
	w.UseCRLF = true // RFC 4180 line endings
	for _, record := range records {
		_ = w.Write(record)
	}
	w.Flush()
	fmt.Print(buf.String())
	// → name,age,city\r\n
	// → Alice,30,Berlin\r\n
	// → Bob,25,Tokyo\r\n
}
CLI (csvformat from csvkit)
# Re-format a CSV file with csvkit (Python-based)
csvformat -D ";" input.csv > output.csv

# Convert tabs to commas
csvformat -t input.tsv > output.csv

# Force-quote all fields
csvformat -U 1 input.csv > quoted.csv

# Using Miller (mlr) to normalize
mlr --icsv --ocsv --quote-all cat input.csv > clean.csv

자주 묻는 질문

CSV 포매터는 무엇을 하나요?
CSV 포매터는 원시 CSV 텍스트를 파싱하고, 필드 주변의 인용 부호를 정규화하고, 불필요한 공백을 제거하고, 일관된 구분자와 줄 끝 스타일로 데이터를 재직렬화합니다. 출력은 RFC 4180 또는 선택한 형식화 규칙을 따르는 깔끔한 CSV 파일입니다.
CSV 형식화와 CSV 유효성 검사의 차이는 무엇인가요?
유효성 검사는 CSV 파일이 규칙을 따르는지 확인하고 오류를 보고합니다. 형식화는 더 나아가 파일을 다시 작성하여 문제를 수정합니다. 유효성 검사기는 5번 행에 인용되지 않은 쉼표가 있다고 알려줍니다. 포매터는 필드 주변에 인용 부호를 추가하여 수정합니다.
가져오기 전에 CSV 파일을 형식화해야 하는 이유는 무엇인가요?
데이터베이스 가져오기 도구, ETL 파이프라인, 스프레드시트 소프트웨어는 각각 CSV 파싱 규칙이 약간 다릅니다. 쉼표가 포함된 인용되지 않은 필드는 엄격한 파서에서 두 열로 분리됩니다. 가져오기 전에 RFC 4180을 따르도록 CSV를 형식화하면 이러한 열 이동 오류와 무소음 데이터 손상을 방지합니다.
이 도구를 사용할 때 데이터가 서버로 전송되나요?
아니요. 모든 파싱과 형식화는 JavaScript를 사용하여 브라우저에서 이루어집니다. CSV 데이터는 기기에 남아 있으며 네트워크를 통해 전송되지 않습니다. 도구를 사용하는 동안 브라우저의 네트워크 탭을 열어 확인할 수 있습니다.
형식화 시 구분자를 변경할 수 있나요?
네. 도구는 입력 구분자(쉼표, 탭, 세미콜론, 파이프)를 자동으로 감지하고 출력에 다른 구분자를 선택할 수 있습니다. 이는 지역별 CSV 형식 간 변환이나 TSV에서 표준 CSV로 전환할 때 유용합니다.
도구는 내장 줄바꿈이 있는 인용 필드를 어떻게 처리하나요?
RFC 4180에 따라 줄바꿈을 포함하는 필드는 큰따옴표로 감싸야 합니다. 포매터는 이러한 내장 줄바꿈을 보존하고 주변 인용 부호가 있는지 확인합니다. 입력에 인용되지 않은 줄바꿈이 있는 필드가 있으면 포매터가 재직렬화 중에 인용 부호로 감쌉니다.
이 도구가 처리할 수 있는 최대 파일 크기는 얼마인가요?
도구가 브라우저에서 실행되므로 실질적인 한계는 기기의 사용 가능한 메모리에 따라 다릅니다. 최신 장치에서는 10~20MB 파일이 일반적으로 문제없이 처리됩니다. 그보다 큰 파일에는 csvkit 또는 Miller 같은 커맨드라인 도구가 더 적합합니다.