이 CSV TOML 변환기는 CSV의 각 레코드를 [[rows]] 테이블 하나로 쓰는 TOML 문서를 만들고, 헤더가 키가 됩니다. TOML 문서의 루트는 반드시 테이블이어야 하므로 레코드는 rows라는 키 하나 아래에 묶입니다. TOML에서 레코드 목록을 담는 관용적인 방법이며, 읽으면 {"rows": [...]}가 됩니다.
Hugo 데이터 파일, 파이썬 3.11의 tomllib, 러스트의 toml 크레이트처럼 데이터나 설정을 TOML로 읽는 도구에 유용합니다. ‘숫자·불리언·null 감지’가 기본으로 켜져 있어 평범한 숫자만 있는 열은 TOML 정수나 실수, true와 false만 있는 열은 불리언이 되고, 02139 같은 코드는 문자열로 남습니다. TOML에는 null이 아예 없으므로 빈 셀이나 null 단어는 그 테이블에서 키째 빠지고, 어떤 키가 빠졌는지 안내가 표시됩니다.
TOML은 변환기에 들어 있는 TOML 1.0 작성기가 브라우저 안에서 만들며, 입력한 내용은 서버로 전송되지 않습니다. 입력 한도는 20 MiB, 데이터 행 50,000개, 열 200개입니다.
사용 방법
CSV 불러오기
텍스트를 붙여 넣거나 .csv, .tsv 파일을 끌어다 놓거나 예제를 엽니다. 따옴표로 감싼 셀에는 구분자, 두 번 쓴 따옴표, 줄바꿈이 들어가도 됩니다.
구분자와 빈 줄 확인
‘자동 감지’는 앞쪽 레코드들에서 쉼표, 세미콜론, 탭, 파이프를 비교합니다. 배지에 표시된 구분자가 틀리면 ‘구분자’에서 직접 고르세요. ‘빈 줄 건너뛰기’가 켜져 있어 빈 줄이나 구분자만 있는 줄이 빈 테이블이 되지 않습니다.
타입 처리 정하기
TOML 정수, 실수, 불리언을 원하면 ‘숫자·불리언·null 감지’를 켜 두고, 내보낸 파일이 빈 값을 다르게 표시한다면 ‘null로 볼 단어’에 추가합니다. 끄면 빈 셀까지 모든 셀이 TOML 문자열로 쓰입니다.
안내 확인
값이 null이라 빠진 키, 앞자리 0이나 지나치게 긴 자릿수 때문에 숫자처럼 보여도 문자열로 남은 열이 안내에 표시됩니다. ‘파일을 읽은 결과’ 패널에서는 열마다 정해진 타입을 볼 수 있습니다.
.toml로 복사 또는 저장
결과를 복사하거나 data.toml로 내려받습니다. 커밋하기 전에 이 파일을 읽을 도구로 한 번 파싱해 보세요.
작동 원리
최상위 배열이 아니라 [[rows]]를 쓰는 이유
TOML 문서의 루트는 테이블이라 테이블의 배열이 그대로 루트가 될 수 없고, 레코드 목록에는 걸어 둘 키가 필요합니다. TOML 1.0 명세의 테이블 배열 문법 [[rows]]는 나타날 때마다 rows라는 배열에 새 테이블을 하나 추가하며, 각 테이블에 레코드 하나의 키-값 쌍이 들어갑니다.
감싸는 이름은 고정입니다. 애플리케이션이 [[products]] 같은 다른 이름을 기대한다면 출력에서 [[rows]]를 바꾸세요. 모든 [[rows]] 줄이 똑같으므로 단순 찾아 바꾸기로 충분합니다.
[[rows]]
name = "Ari"
score = 10
active = true
[[rows]]
name = "Bea"
active = false타입 감지와 없는 null
TOML에는 문자열, 정수, 실수, 불리언, 날짜·시간 값이 있지만 null은 없습니다. 감지가 켜져 있으면 평범한 숫자만 있는 열은 정수나 실수로, true와 false만 있는 열은 불리언으로, 나머지는 문자열로 쓰입니다. 비어 있거나 ‘null로 볼 단어’에 해당하는 셀은 TOML로 표현할 방법이 없어 그 레코드의 테이블에서 키가 빠지고, 몇 개가 어디서(rows.score 등) 빠졌는지 안내가 표시됩니다. 파이썬에서는 row.get("score")가 None을 돌려줍니다.
숫자는 해석된 값으로 쓰입니다. 1500은 자릿수 구분 밑줄 없이 1500, 1e3은 1000, 9.0은 9가 됩니다. TOML은 정수와 실수를 구분하므로 9.0과 9.5가 함께 있는 열은 한 테이블에서는 정수, 다음 테이블에서는 실수가 됩니다. 날짜는 TOML 날짜 값으로 바꾸지 않아 2026-03-14는 따옴표 문자열로 남습니다.
| 숫자 열의 CSV 셀 | 감지 켬 | 감지 끔 |
|---|---|---|
| 10 | 10 | "10" |
| 9.0 | 9 | "9.0" |
| 1e3 | 1000 | "1e3" |
| NA 또는 빈 셀 | 키가 빠짐 | "NA" 또는 "" |
키와 문자열
ASCII 영문자, 숫자, 밑줄, 하이픈으로만 된 헤더는 베어 키라서 그대로 씁니다. first name, c.d, ü처럼 그 밖의 헤더는 따옴표 키가 되므로 헤더의 점 때문에 중첩 테이블이 생기는 일은 없습니다. TOML은 한 테이블에서 같은 키를 두 번 정의할 수 없어서, 빈 헤더는 column_N, 반복된 헤더는 _2, _3이 붙은 이름이 됩니다.
문자열은 항상 큰따옴표로 감싼 TOML 기본 문자열입니다. 따옴표와 역슬래시는 \", \\로, 줄바꿈은 \n, 탭은 \t, 그 밖의 제어 문자는 \uXXXX로 이스케이프되므로 여러 줄 셀도 출력에서는 한 줄에 들어갑니다.
실제 예시
name,score,active
Ari,10,true
Bea,NA,false[[rows]]
name = "Ari"
score = 10
active = true
[[rows]]
name = "Bea"
active = false기본 옵션입니다. score의 NA는 null인데 TOML은 이를 담을 수 없어 Bea의 테이블에는 score 키가 없고, 안내에 rows.score가 표시됩니다.
a-b,c.d,e f,ü
1,2,3,4[[rows]]
a-b = 1
"c.d" = 2
"e f" = 3
"ü" = 4a-b는 유효한 베어 키입니다. 점, 공백, ASCII 밖의 문자가 든 헤더는 따옴표로 감싸므로 c.d가 중첩 테이블이 되지 않습니다.
item,qty,price,weight
bolt,1500,0.25,9.0
nut,12,1e3,9.5[[rows]]
item = "bolt"
qty = 1500
price = 0.25
weight = 9
[[rows]]
item = "nut"
qty = 12
price = 1000
weight = 9.51500에는 자릿수 구분 밑줄이 붙지 않고, 1e3은 1000으로 쓰였습니다. 9.0은 정수 9가 됐고 다음 테이블의 9.5는 실수입니다.
id,active,note
1,true,"say ""hi"""
2,false,[[rows]]
id = "1"
active = "true"
note = "say \"hi\""
[[rows]]
id = "2"
active = "false"
note = ""‘숫자·불리언·null 감지’를 끈 결과입니다. 모든 값이 기본 문자열이고, 빈 셀은 빈 문자열로 남으며, CSV에서 두 번 쓴 따옴표는 이스케이프된 TOML 따옴표가 됩니다.
자주 하는 실수
빈 값 대신 키가 빠짐
TOML에는 null이 없어서 score가 빈 레코드에는
score키 자체가 없습니다.row["score"]로 바로 읽는 코드는 오류가 나므로 기본값이 있는 조회를 쓰세요. 감지를 끄면 빈 문자열이 남지만 숫자와 불리언도 모두 문자열이 됩니다.한 키에 정수와 실수가 섞임
9.0과9.5가 든 열은 한 테이블에서는weight = 9, 다른 테이블에서는weight = 9.5가 됩니다. 파이썬의isinstance(x, float)처럼 타입을 확인하는 코드나 엄격한 스키마는 두 가지 타입을 보게 됩니다. 코드에서 값을 변환하거나, 감지를 꺼서 텍스트로 유지하세요.앞자리 0과 긴 ID는 문자열로 남음
02139같은 우편번호와 20자리 ID처럼 JavaScript 숫자가 정확히 담지 못하는 값은 일부러 문자열로 씁니다. TOML은 정수의 앞자리 0을 금지하고, 그 ID는 숫자로 바꾸면 자릿수를 잃기 때문입니다. 해당 열은 안내에 표시됩니다.소수점 쉼표는 숫자가 아님
세미콜론으로 구분된 내보내기 파일의
4,50은 셀 단위로는 제대로 읽히지만 평범한 숫자가 아니어서 열 전체가 문자열로 쓰입니다. TOML 실수가 필요하면 내보내기 전에 소수점 기호를 바꾸세요.날짜와 중첩 테이블은 만들지 않음
TOML은 오프셋 날짜·시간, 로컬 날짜, 중첩 테이블을 지원하지만 이 변환기는 평평한 테이블에 문자열, 정수, 실수, 불리언만 씁니다. TOML 로컬 날짜가 필요하면 ISO 날짜의 따옴표를 직접 지우세요.
자주 묻는 질문
CSV를 TOML로 어떻게 변환하나요?
CSV를 붙여 넣거나 열고, 구분자 배지가 맞는지 확인한 뒤 결과를 복사합니다. 각 레코드는 헤더 이름을 키로 하는 [[rows]] 테이블로 쓰이며, 옵션을 바꾸면 결과가 바로 갱신됩니다.
빈 셀은 어떻게 되나요?
감지가 켜져 있으면 TOML에 null이 없으므로 빈 셀이나 null 단어의 키는 그 테이블에서 빠지고, 빠진 키가 안내에 표시됩니다. 감지를 끄면 빈 셀은 빈 문자열로 쓰입니다.
9.0이 왜 9로 쓰이나요?
감지가 켜져 있으면 셀을 먼저 숫자로 바꾸는데, 9.0은 9와 같은 숫자이고 TOML은 이를 정수로 씁니다. 적힌 텍스트를 그대로 문자열로 남기려면 감지를 끄세요.
날짜는 TOML 날짜로 바뀌나요?
아니요. 2026-03-14 같은 날짜는 따옴표 문자열로 쓰입니다. TOML 로컬 날짜가 필요하면 따옴표를 직접 지우세요.
점이나 공백이 든 헤더는 어떻게 되나요?
"c.d", "e f"처럼 따옴표 키로 쓰여 점 때문에 중첩 테이블이 생기지 않습니다. 베어 키에는 ASCII 영문자, 숫자, 밑줄, 하이픈만 쓸 수 있어서 ü 같은 문자도 따옴표로 감쌉니다.
배열 대신 id를 키로 하는 테이블로 만들 수 있나요?
바로는 안 됩니다. 출력은 항상 rows 아래의 테이블 배열입니다. 파싱한 뒤 코드에서 모양을 바꾸세요.
파일이 서버로 전송되나요?
아니요. 입력한 내용은 브라우저 안에서 처리되며 서버로 전송되지 않습니다. 설정값이나 내부 호스트 이름이 든 CSV라면 중요한 점입니다.
마지막 업데이트:
