검수요청.png검수요청.png

CSV

해시넷
이동: 둘러보기, 검색

CSV(씨에스브이)는 "Comma-Separated Values"의 약자로서, 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 확장자는 .csv이며 MIME 형식은 text/csv이다. comma-separated variables라고도 한다.

개요[편집]

CSV는 컴퓨터 용어로, 표 형태의 데이터를 저장하는 파일 형식이다. 주로 쓰이는 확장자는 .csv이며 MIME 형식은 text/csv이다. 한글로 '씨에스브이'라고 읽는다. 한 줄이 한 개의 행에 해당하며, 열 사이에는 쉼표(,)를 넣어 구분한다.[1] 오래 전부터 스프레드시트데이터베이스 소프트웨어에서 많이 쓰였으나 세부적인 구현은 소프트웨어에 따라 다르다. 그것들을 추가한 형태가 2005년 10월 RFC 4180에서 IESG의 외부에서 결정된 유용한 정보의 제공으로 사양이 문서화됐다. 비슷한 포맷으로는 탭으로 구분하는 'tab-separated values'(TSV)나, 반각 스페이스로 구분하는 'space-separated values'(SSV) 등이 있으며, 이것들을 합쳐서 character-separated values (CSV), delimiter-separated values라고 부르는 경우가 많다.[2]

특징[편집]

줄 바꿈 문자는 라인 피드(LF) 또는 캐리지 리턴-라인 피드(CRLF)를 사용한다. 표의 형태를 직관적으로 나타내는 간단한 형식이라 이해하기 쉬우며, 소프트웨어로 처리하는 것도 쉽다. 텍스트 기반 형식이라 사람이 직접 읽고 수정하는 것도 가능하다. XML과 같은 다른 텍스트 기반 형식에 비해 간결해서 차지하는 용량도 적다. 이런 표현이 익숙하지 않은 사람들을 위해, CSV를 표 기반으로 바꿔서 보여주는 툴도 많은 편이다. 단점은 데이터에 쉼표가 포함된 내용을 취급하기 곤란하다는 것. 예를 들어 천 단위마다 쉼표를 찍어 놓은 금액 데이터를 CSV에 직접 집어넣으면 나중에 해석할 때 서로 다른 열로 취급되므로 문제가 된다. 해결책은 쉼표가 포함된 문자열을 따옴표로 감싸거나, 쉼표 대신 탭 문자(\t)를 구분자로 사용하는 것이다. 후자의 경우 TSV(Tab-Separated Values)라고 부른다.[1]

CSV라는 데이터 구조 자체에 무슨 표준이 있는 것은 아니라서 구분자를 뭘로 쓰든 데이터를 주고받는 사이에 약속만 지키면 된다. CSV에서 사용하는 특수 문자는 필드 구분자와 레코드 구분자 둘 뿐이고 인용이나 이스케이프 문자는 선택 사항이다. 일반적으로 데이터 생산자가 CSV데이터의 성격을 보고 필드 안에 들어갈 확률이 가장 적은 문자를 필드 구분자로 정한다. 레코드 구분자 역시 필드에 줄바꿈이 자주 쓰일 경우 라인 피드 대신 널 문자(NULL)를 쓰기도 한다.[1]

일반적으로 CSV파일의 무결성을 검증할 때는 한 줄의 콤마 수를 센다. 모든 줄의 콤마 수는 다 같아야 하며 더 적거나 더 많은 줄이 발견되면 오류로 판단해 걸러내는 등의 적절한 처리를 할 필요가 있다. 가장 일반적으로 발견되는 오류는 다음과 같다.[1]

  • 내용에 콤마가 들어가서 한 줄의 콤마 수가 몇 개 늘어나는 경우
  • 줄바꿈 문자가 누락돼 한 줄의 콤마 수가 두 배로 늘어나는 경우
  • 내용에 줄바꿈 문자가 들어가서 두 줄 이상의 콤마 수가 정상보다 적은 경우
  • 줄바꿈 문자의 캐리지 리턴(CR)을 걸러내지 못해 마지막 필드의 데이터가 깨지는 경우
  • 따옴표가 정상적으로 닫히지 않아 임의의 필드와 레코드가 한 필드 안에 인용돼 들어간 경우
  • 마지막 줄의 라인 피드 누락으로 마지막 줄 데이터를 읽지 못한 경우
  • 첫 줄에 헤더 텍스트가 들어간 CSV를 사용할 때 첫 줄을 건너뛰지 않은 경우

가장 나쁜 경우는 CSV의 필드 안에 게시판 본문 데이터를 그냥 담는 것이다. 게시글 본문에는 쉼표, 따옴표, 줄바꿈문자가 모두 들어가기 때문에 데이터가 어떻게 손실되었는지, 혹은 데이터가 손실된 레코드인지조차 모를 수도 있다. 게시글 본문 내용 자체가 CSV데이터일 경우 존재하지 않는 게시글이 하나 등록될 수 있다. CSV 인젝션(Injection)의 경우에는 아예 CSV 자체를 쓰지 않는 것이 좋다. 게시판 본문 데이터가 HTML일 경우가 XML을 써도 힘들다.[1] 테이블 덤프 등의 이유로 CSV가 꼭 필요하다면 게시판 본문 데이터 전체를 URI Encode하고 무조건 따옴표로 인용하면 데이터 크기가 커지고 편집기로 직접 못 읽지만 어쨌든 문제를 회피할 수 있다. 자바스크립트 사용자라면 encodeURI가 아닌 encodeURIComponent함수를 써야 제대로 이스케이프 처리된다.[1]

보다시피 데이터 오염에 대단히 취약한 포맷이다 보니 본격적인 데이터 교환 포맷으로는 XML과 JSON을 쓴다. 둘 중 XML이 상대적으로 데이터 오염에 잘 견딘다. 하지만 CSV는 2017년 현재도 IT 및 산업계에서 널리 사용중인데 가장 결정적인 이유는 데이터의 크기가 작기 때문이다. JSON만 돼도 CSV대비 2배에서 3배 이상 데이터의 크기가 커지는데데 비해 CSV 파서(parser)는 대단히 간단해서 인용 및 이스케이프 처리를 하지 않는 CSV 파서는 대부분의 프로그래밍 언어에서 코드 한 줄로 가능하다. 게다가 파일 일부에 문제가 생겨도 CSV의 오류는 보통 레코드 단위로 재동기화가 가능하다.[1]

JSON은 따옴표나 중괄호 같은 게 하나라도 누락되면 전체 JSON파일의 로드에 실패하는 치명적인 문제가 있다. XML의 경우에는 보통 문제가 생긴 엘리먼트의 부모 엘리먼트에까지만 오류가 전파되므로 CSV보다 더 강한 내결함성이 있지만 JSON보다도 데이터의 크기가 커져버린다. 만약 로드하려는 데이터가 기가바이트 단위를 바라본다면 몇 퍼센트의 데이터 오버헤드도 무시할 수 없는 문제가 되는데 이런 분야에서 CSV가 활약하는 것이다. 덤으로 CSV는 압축도 잘 되고 스트림 압축이 가능해서 데이터의 일부만 수신된 상태에서도 데이터 적재 작업을 시작할 수 있다.[1]

파일 여는법[편집]

주로 스프레드시트 프로그램은 CSV 파일을 여는 데 많이 사용된다. 스프레드시트 프로그램은 열을 통해 CSV 파일데이터를 체계적으로 정렬한다. 파일의 모든 내용을 필터링하는 데 도움되며, 사용자는 킹소프트 스프레이드시트(Kingsoft Spreadsheets) 또는 매우 일반적인 오픈오피스 컬크(OpenOffice Calc)와 같은 무료 스프레드시트 도구를 최대한 활용한다.

오픈오피스 컬크(OpenOffice Calc)가 이미 설치되어 있다면 CSV 파일을 두 번 클릭 시 자동으로 파일이 열린다. 다른 방법으로 컴퓨터에 열기 프롬프트에서 CSV 파일을 열 프로그램을 선택하는 방법도 있다. 그 밖에 기내에서 획기적인 기능을 갖춘 구글 스프레드시트 또는 조호 오피스(Zoho Office)와 같은 온라인 스프레드시트 프로그램을 사용할 수 있다. 이러한 도구를 사용하면 둘 이상의 사용자가 단일 파일에 실시간으로 액세스 할 수 있다. 구글 스프레드시트에 대한 더 흥미로운 점은 정확하게 말하면 Excel 파일을 시트로 또는 그 반대로 변환 할 수 있다는 것이다. 다른 방법으로는 구글 드라이브를 사용하여 CSV 파일을 열 수 있다.[3]

그리고 A 텍스트 편집기를 사용해 CSV 파일을 열수 있다. 일반적으로 (Mac) 운영 체제에는 텍스트에디트(TextEdit)이라는 프로그램이 있으며, 윈도우(Windows)는 메모장을 사전 설치된 응용 프로그램으로 사용한다. 안타깝게도, 그러한 프로그램은 많은 양의 데이터가있는 파일을 처리 할 수있는 능력이 없다. 이러한 장애를 해결하기 위해 사용자가 복잡한 CSV 파일을 처리하려고 할 때에는 유용한 타사의 응용 프로그램이 널리 보급되어 잘 활용하면 된다. 이 후, CSS 또는 HTML과 같은 프로그래밍 언어를 사용하여 정사각형 파일을 만들 수 있다. 또한, 사용자는 TXT, XML, CSV 또는 PHP와 같은 확장자로 끝나는 파일을 편집 할 수 있다.[3]

CSV 파일 변환[편집]

CSV 파일과 상호 작용하려는 경우이 단계는 매우 중요하다. 구글 문서에서 모든 CSV 파일을 엑셀(Excel) 형식의 파일로 변환 할 수 있다. 사용자는 파일을 간편하게 변환할 수 있는 것이 가능하다. 다른 이름으로 저장 단추를 선택하며 XLS, TXT, XML, SQL 등 다양한 형식이 있다.[3]

컴퓨터에 파일 변환 프로그램이없는 경우 브라우저 이동 후 무료 파일 변환기 소프트웨어를 잘 활용해야한다. 지루한 프로그램 다운로드 과정을 거치지 않고 온라인으로 할 수 있기 때문이다. 일반적인 CSV 외에 다른 형식도 있습니다. (Mac) 운영 체제를 사용하는 컴퓨터는 CSV (Macintosh)-Excel 워크 시트에서 쉼표로 구분 된 파일로 저장하는 데 용이하다.[3]

유니코드 텍스트 (* txt)-Linux, 윈도우(Windows) 및 매킨토시(Macintosh)를 포함한 대부분의 운영체제에서 사용되는 범용 형식이다. 이 형식의 가장 좋은 점은 모든 최신 언어를 읽는다. 데이터는 UTF-8 또는 UTF-16 인코딩을 사용하여 엑셀(Excel) 파일에서 CSV로 내보내진다. 차이점은 UTF-8을 사용하면 각 기호에 대해 1-4 바이트 사이의 문자를 사용하므로 인코딩이 더 많이 압축된다. 이 유형의 인코딩ASCII (American Standard Code for Information Interchange)를 기반으로하는 모든 문자 형식과 호환이 된다. UTF-16은 하나의 심볼을 2-4 바이트로 저장한다. 데이터에 일본어 및 중국어와 같은 아시아 문자가있을 때 사용된다.[3]

CSV 파일은 많은 분야에서 현저하게 사용되고 있다. 우리가 전자 상거래 산업을 공식화하면 실제로 우리가 관련시킬 수있는 것이 많이 있기 때문에 파일을 가져오고 내보내서 인벤토리 및 제품 정보를 업데이트 한다. 새로운 제품이나 기존 제품을 추가하는 것 또한 가능하다. 온라인 상점 소유자는이 전략을 사용하여 신규 고객의 데이터를 전송하고 원활한 재고 관리를 수행 할 수 있으며, 파일을 사용하여 구매자에게 운송중인 모든 제품의 추적 번호를 가져올 수 있다.[3]

CSV 구조화[편집]

CSV 파일에 사용 된 모든 구조는 유사한 형식을 따르기 때문에 작성하기 쉽고 적은 노력이 필요하다. 수동으로 수행하려면 메모장 ++와 같은 텍스트 편집기를 사용하여 프로그래밍 언어에 몇 가지 지배적인 기능을 지원할 수 있다. 혹은 스프레드시트 프로그램을 사용하면 데이터가 행과 열로 정렬되는 셀이 있으므로 사용자의 요구를 더 잘 충족시킬 수 있다.[3]

활용[편집]

파이썬[편집]

CSV란 Comma-separated values의 약자로서 CSV 파일은 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷이다. 가장 간단한 형태의 CSV 파일은 문자열을 콤마로 Split 하여 처리하면 되지만, 간혹 컬럼 데이타에 콤마가 있을 경우 이중인용부호로 감싸서 데이타 내의 콤마를 Escape하기 (예: "Lee, Alex") 때문에, 파이썬에 내장된 csv 모듈을 사용하여 .csv 파일을 처리하는 것이 좋다.[4]

CSV 파일 읽기[편집]

CSV 파일을 읽기 위해서는 먼저 파이썬에 기본 내장된 csv 모듈을 임포트(import) 한다. 다음 csv 확장자 파일을 오픈하고 파일객체를 csv.reader(파일객체) 에 넣으면 된다. csv.reader() 함수는 이터레이터(Iterator) 타입인 리더(reader) 객체를 리턴하므로 for 루프를 돌며 한 라인씩 가져올 수 있다. 이때 리턴되는 각 라인은 컬럼들을 나열한 리스트(list) 타입이다.[4]

CSV 파일 쓰기[편집]

CSV 파일을 쓰기 위해서는 .csv 파일을 쓰기모드로 오픈하고 파일객체를 csv.writer(파일객체) 에 넣으면 된다. CSV writer는 writerow() 라는 메소드를 통해 리스트(list) 데이터를 한 라인 추가하게 된다. 윈도우즈의 경우 csv 모듈에서 데이터를 쓸 때 각 라인 뒤에 빈 라인이 추가되는 문제가 있는데, 이를 없애기 위해 파일을 오픈 할 때 newline= 과 같은 옵션을 지정한다.[4]

자바[편집]

CSV 파일을 구문 분석하는 편리한 방법을 제공하는 미리 컴파일 된 타사 라이브러리로 OpenCSV가 있으며 다른 잘 알려진 라이브러리로는 SuperCSV 및 CommonsCSV 가 있으며 일부 고급 기능을 제공한다.[5]

각주[편집]

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 CSV〉, 《나무위키》
  2. CSV (파일 형식)〉, 《위키백과》
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 쉼표로 구분 된 값(CSV)이란 무엇입니까?〉, 《ecommerce platforms》
  4. 4.0 4.1 4.2 CSV 파일 사용하기〉, 《예제로 배우는 파이썬 프로그래밍》
  5. Java로 읽기 및 쓰기〉, 《RIP Tutorial》

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 CSV 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.