컴퓨터와 디지털 · 데이터와 기록

CSV — 쉼표가 들어 있는 칸은 어떻게 나눌까

간단한 표를 주고받을 때 필요한 작은 약속들

약 5분의 작은 발견

내 읽기 목록 ↗
색별로 나눈 기록 카드를 정리하는 사람과 노트북이 있는 책상의 삽화.
AI 관련 삽화 · 기록 카드를 정리하는 분위기 그림입니다. 실제 CSV 파일이나 실행 결과를 표시한 도식은 아닙니다.

도서 목록을 다른 프로그램으로 옮겼더니 제목이 두 칸으로 갈라졌다. 제목 안에 있던 쉼표가 칸을 나누는 표시처럼 처리된 것이다. 눈으로 보면 한 제목인데 컴퓨터에게는 어디서 항목이 끝나는지 분명하지 않았던 셈이다.

표를 주고받을 때 자주 만나는 CSV는 이 문제를 생각하기 좋은 형식이다. 복잡한 계산을 배우지 않아도 된다. 쉼표와 따옴표를 어떤 역할로 쓸지 약속하는 작은 문제가 여러 프로그램 사이의 협력과 연결된다는 점을 살펴보자.

01. 표를 글자로 적는 방법

CSV는 쉼표로 구분한 값이라는 뜻의 이름이다. 스프레드시트나 데이터베이스의 정보를 내보내고 가져올 때 널리 쓰인다. 여러 칸에 들어 있던 내용을 일정한 구분 표시를 사용해 텍스트로 적는 방식이라고 생각하면 첫 이해에 도움이 된다.

화면에서 본 표의 테두리와 색을 그대로 옮기는 것이 핵심은 아니다. 각 줄과 항목에 어떤 값이 있는지를 주고받는 데 초점이 있다. 보기 좋은 지면과 정보의 전달은 다른 목적일 수 있다. 같은 목록도 어떤 부분을 보관하려는지에 따라 파일의 형태가 달라진다.

02. 제목 안의 쉼표는 다른 역할을 한다

가상의 책 제목을 《바다, 그리고 집》이라고 해 보자. 그 다음 칸에는 도시 이름 서울을 넣고 싶다. 제목 속의 쉼표와 칸 사이의 쉼표가 똑같이 생겼으므로 단순히 쉼표를 만날 때마다 나누면 제목이 둘로 갈라진다.

이름표를 따옴표로 묶는 약속을 사용하면 그 안쪽의 쉼표를 값의 일부로 읽을 수 있다. 이 예를 실제 CSV 한 줄로 적으면 "바다, 그리고 집",서울이 된다. 읽는 프로그램이 같은 약속을 따를 때 첫 항목은 제목 전체, 두 번째 항목은 서울로 나뉜다.

03. 따옴표 자체가 내용이라면

문제는 한 단계 더 이어진다. 항목의 내용에 따옴표가 들어갈 수도 있기 때문이다. 값의 경계를 알리는 따옴표와 실제 문장 속의 따옴표를 구분할 방법이 필요하다. 같은 표시가 두 역할을 갖게 되면 예외를 처리하는 약속도 생긴다.

파이썬의 CSV 문서는 따옴표를 겹쳐 쓰는 방식이나 별도의 처리 표시를 사용하는 설정을 설명한다. 모든 세부를 외우는 것보다 왜 규칙이 필요한지 이해하면 된다. 사람이 문맥으로 알아보는 구분을 컴퓨터에게 맡기려면 그 문맥을 더 명시적으로 표현해야 하는 것이다.

04. CSV라는 이름 아래에도 차이가 있다

공식 문서는 프로그램마다 구분자와 따옴표 등의 세부가 달라질 수 있다고 설명한다. CSV라는 이름을 썼다고 모든 파일이 한 가지 방식으로만 만들어지는 것은 아니다. 비슷한 모양 안에도 여러 관례가 있어서 읽는 쪽과 쓰는 쪽의 설정이 맞아야 한다.

예를 들어 어떤 자료는 항목 구분에 다른 문자를 사용한다. 파이썬은 이런 차이를 다루기 위한 설정 묶음을 제공한다. 독자가 그 설정 이름을 배울 필요는 없다. 파일을 받았는데 한 칸에 내용이 몰리거나 엉뚱하게 갈라진다면 자료가 전부 사라졌다고 생각하기 전에 구분의 약속을 살펴볼 수 있다.

05. 숫자처럼 보여도 이름일 수 있다

표에 0012가 적혀 있다. 이것이 수량이라면 숫자 12와 같은 값을 뜻할 수 있지만, 물건의 식별 번호라면 앞의 0까지 중요할 수 있다. 같은 모양을 읽는 방법에 따라 남겨야 할 정보가 달라진다. 문자를 숫자로 바꾸는 일에도 판단이 들어간다.

공식 문서는 기본 CSV 읽기가 각 항목을 문자열로 돌려주며, 특정 옵션 없이 자동으로 자료형을 바꾸지 않는다고 설명한다. 다른 프로그램은 다른 방식으로 해석할 수 있다. 따라서 어떤 값이 보였다는 사실과 그것이 어떤 종류의 정보로 읽혔는지를 구분하는 습관이 도움이 된다.

06. 첫 줄을 어떻게 읽을지도 약속이다

도서 목록의 첫 줄에 제목과 도시라는 항목 이름을 넣을 수 있다. 하지만 그 줄이 설명인지 실제 자료의 첫 행인지는 읽는 방식에 달려 있다. 파이썬의 사전 형태 읽기는 첫 행을 항목 이름으로 사용하는 방법 등을 제공한다. 단순한 줄에도 역할을 정하는 선택이 있는 것이다.

목록을 잘 전달하려면 파일 하나뿐 아니라 열의 의미도 분명해야 한다. 같은 도시라는 칸에 출생지와 출판지를 섞으면 형식이 정상이어도 내용은 오해될 수 있다. 컴퓨터가 잘 나누어 읽는 일과 사람이 같은 뜻으로 이해하는 일은 서로 다른 확인이다.

07. 작은 예로 실제 동작을 확인하기

이 원고의 가상 제목과 서울을 넣은 한 줄은 파이썬 CSV 읽기로 직접 확인했다. 첫 항목이 바다, 그리고 집으로 유지되는지, 두 번째가 서울인지 비교했다. 아주 작은 검산이지만 말로 설명한 규칙이 실제 예와 맞는지 살피는 과정이다.

함께 실은 AI 삽화는 기록 카드를 정리하는 분위기를 표현한다. 실제 CSV 파일이나 프로그램의 실행 결과를 그린 도식은 아니다. 카드가 나뉘어 있어야 정리하기 쉬운 것처럼, 텍스트의 값에도 서로 합의한 경계가 필요하다는 생각을 떠올리는 그림이다.

08. 간단한 형식도 합의 위에서 움직인다

CSV의 매력은 비교적 단순한 텍스트로 여러 도구 사이에 표의 값을 옮길 수 있다는 데 있다. 그러나 단순하다는 말이 아무 규칙도 없다는 뜻은 아니다. 쉼표와 따옴표, 첫 줄과 자료형에 관한 선택이 서로 맞아야 한다.

다음에 내려받은 목록이 엉켜 보이면 이 작은 약속들을 떠올려 보자. 내용이 틀렸는지, 나누어 읽는 방식이 달랐는지 질문할 수 있다. 쉼표 하나의 자리를 이해하는 일은 컴퓨터가 정보를 주고받을 때 얼마나 구체적인 합의가 필요한지 보여 준다.

이야기의 바탕이 된 자료
← 데이터와 기록의 다른 이야기