CSV 도우미English

CSV가 한 열로 읽힐 때: 쉼표 대신 세미콜론인지 확인하세요

파일 이름이 .csv여도 실제 구분자는 쉼표가 아닐 수 있습니다. 헤더 전체가 한 칸에 들어간다면 인코딩을 바꾸기 전에 파일의 구분자와 읽기 설정이 같은지 확인하세요. 이 글은 엑셀 화면 없이 Python으로 문제와 해결을 재현합니다.

원인

이 예제 파일은 세미콜론으로 열을 나눕니다. 쉼표로 읽는 파서는 세미콜론을 필드 경계로 사용하지 않으므로 id;memo;count 전체를 헤더 한 칸으로 읽습니다. 셀 내용에도 쉼표가 들어갈 수 있어 파일 안의 쉼표 개수만으로 형식을 확정하면 안 됩니다.

Python의 CSV 파서는 delimiter 설정으로 구분자를 지정할 수 있습니다. 기본 쉼표와 다른 파일은 그 형식에 맞춰 읽어야 합니다. Python csv 공식 문서

재현

04-semicolon.csv는 직접 만든 UTF-8 합성 파일입니다. 헤더 다음의 데이터는 2개이며, 메모 안에 쉼표·세미콜론·따옴표를 의도적으로 넣었습니다.

id;memo;count
A1;"red, blue; green";2
A2;"say ""hello""";3

다음 코드는 예제 파일과 같은 폴더에서 Python 3으로 실행합니다.

import csv

def read_with(delimiter):
    with open('04-semicolon.csv', encoding='utf-8', newline='') as f:
        return list(csv.reader(f, delimiter=delimiter, strict=True))

wrong = read_with(',')
correct = read_with(';')
print(len(wrong[0]))
print([len(row) for row in correct])
print(correct[1][1])

결과는 차례로 1, [3, 3, 3], red, blue; green입니다. 올바르게 읽으면 헤더 포함 3레코드가 각각 3열이고 메모의 문장부호도 남습니다. 잘못된 설정으로 모든 행이 반드시 한 칸이 된다는 뜻은 아닙니다. 메모의 쉼표 때문에 다른 행은 또 다르게 잘릴 수 있습니다.

해결

먼저 입력 구분자를 세미콜론으로 지정해 읽고 헤더·열 수·셀 값을 확인합니다. 쉼표 CSV가 필요하다면 값을 파싱한 뒤 CSV writer로 새 사본에 씁니다.

with open('04-comma.csv', 'w', encoding='utf-8', newline='') as f:
    csv.writer(f, lineterminator='\r\n').writerows(correct)

with open('04-comma.csv', encoding='utf-8', newline='') as f:
    reread = list(csv.reader(f, strict=True))
assert reread == correct

04-comma.csv는 이 방식의 출력 예제입니다. 다시 읽은 값이 원본을 세미콜론으로 읽은 결과와 같음을 검증했습니다. 쉼표가 있는 메모를 인용하는 처리는 writer에 맡깁니다.

텍스트 전체에서 ;를 ,로 바꾸는 방법은 쓰지 않습니다. 같은 합성 파일에서 단순 치환을 실행하면 메모도 red, blue, green으로 바뀌었습니다. 표가 읽힌다고 원래 값이 보존된 것은 아닙니다.

CSV 도우미에서 연결할 도구

**‘CSV 검사기’(/csv-check/)**에서 이 예제의 입력 구분자를 ‘세미콜론’으로 직접 지정하고, 헤더 있음 상태에서 데이터 2개·3열과 메모를 확인하는 흐름으로 연결합니다. 자동 판별은 편의 기능이므로 결과가 이상하면 원본 형식과 대조합니다.

JSON이 필요하다면 **‘CSV ↔ JSON 변환’(/csv-json/)**에서도 CSV→JSON 방향·세미콜론·헤더 있음 설정을 사용합니다. 이 도구는 위 코드의 쉼표 CSV 사본 생성과 다른 작업입니다. 쉼표 CSV 생성은 이 글의 Python 예제로 제공합니다.

한계

구분자만 바꿔도 인코딩 깨짐, 잘못 닫힌 따옴표, 원래부터 누락된 필드가 복구되지는 않습니다. 출처가 정한 형식이 불분명하면 한 행만 보고 확정하지 말고 여러 레코드의 열 수와 실제 값을 비교하세요. RFC4180은 쉼표 CSV의 일반 형식을 설명하지만 세미콜론 파일 전체를 동일 규격이라고 부르지는 않습니다. RFC4180

검토일: 2026-10-18. Python 3.9.6에서 잘못된 구분자·올바른 구분자·출력 재파싱·단순 치환에 의한 값 변경을 실행해 확인했습니다. Excel GUI는 필요하지 않으며 실행하지 않았습니다. 도구 연결 설명은 현재 사이트 소스의 기능을 확인한 것으로, 이번 작업에서 브라우저 UI를 실행한 것은 아닙니다.

AI 보조 작성: AI로 초안과 합성 예제를 작성하고 Python 실행 결과·공식 문서를 대조했습니다. 실제 고객 파일은 사용하지 않았습니다.

이 글의 예제 파일을 CSV 검사기에 넣어 직접 확인해 보세요.

CSV 검사기 열기 ›