메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

파이썬 데이터 분석 입문 04, CSV 파일 읽고 쓰기(파트2)

한빛미디어

|

2017-11-24

|

by 클린턴 브라운리

37,180

기본 파이썬(csv 모듈 사용)

 

파이썬에 내장된 csv 모듈을 사용하여 CSV 파일을 처리할 때의 좋은 점 중 하나는 데이터 값에 포함된 쉼표 및 기타 복잡한 패턴을 정확하게 처리할 수 있다는 것이다. 패턴을 인식하고 정확하게 데이터를 파싱할 수 있다면, 데이터를 정확하게 입력하기 위해서 정규 표현식 및 조건부 수식을 설계하는 데 필요한 시간을 데이터를 관리, 분석하고 결과물을 작성하는 데 할애할 수 있다.

 

파이썬에 내장된 csv 모듈을 임포트해서 $6,015.00과 $1,006,015.00이 포함된 입력 파일을 처리해보자. 이 예제를 통해 csv 모듈을 사용하는 법과 데이터 값에 포함되어 있는 쉼표를 처리하는 법을 배우게 될 것이다. 텍스트 편집기에 다음 코드를 입력하고 파일명을 2csv_reader_parsing_and_write.py로 저장한다.

 

#!/usr/bin/env python3

import csv

import sys

input_file = sys.argv[1]

output_file = sys.argv[2]

with open(input_file, 'r', newline=' ') as csv_in_file:

  with open(output_file, 'w', newline=' ') as csv_out_file:

    filereader = csv.reader(csv_in_file, delimiter=',')

    filewriter = csv.writer(csv_out_file, delimiter=',')

    for row_list in filereader:

      filewriter.writerow(row_list)

 

이 코드는 앞선 절에서 살펴본 첫 번째 스크립트와 거의 흡사하므로 차이가 있는 행에 대해서만 설명하겠다.

 

2행에서 csv 모듈을 임포트하여 내장 함수를 사용하여 입력 파일을 파싱하고 출력 파일에 쓸수 있게 한다.

 

두 번째 with 문 다음에 있는 10행은 csv 모듈의 reader()함수를 사용하여 filereader라는 입력 파일을 읽는 객체를 만든다. 마찬가지로 11행은 csv 모듈의 writer()함수를 사용하여 출력 파일에 쓰는 데 사용할 filewriter라는 객체를 만든다. 이 함수들의 두 번째 인수(delimiter = ',')는 기본값 인수이므로 입력 및 출력 파일이 쉼표로 구분된 경우라면 굳이 쓰지 않아도 된다. 다른 구분 기호, 예를 들어 세미콜론(;)이나 탭(\t)으로 구분된 입력 파일을 읽거나 출력 파일을 작성하고 싶다면 구분 기호 인수를 지정해야 한다. 

 

마지막 줄인 13행은 filewriter객체의 writerow()함수를 사용하여 각 행의 값을 리스트 자료형으로 출력 파일에 쓴다. 입력 파일과 파이썬 스크립트가 모두 바탕화면에 저장되어 있고, 명령 프롬프트 또는 터미널 창에서 디렉터리를 변경하지 않았다면, 명령 줄에 다음을 입력하고 엔터 키를 눌러 스크립트를 실행한다(맥 OS에서는 새로운 스크립트에 대해 chmod명령을 먼저 실행하여 스크립트가 실행 가능하게 만들어야 한다) (역주_ 원서 깃허브 코드에는 화면에 출력하는 코드가 빠져 있으므로, 스크린샷과 같이 화면에 출력하려면 앞의 코드 12행 위에 print(row_list)를 추가해야 한다.)

 

python 2csv_reader_parsing_and_write.py supplier_data.csv 2output.csv

 

[그림 2-9]와 같은 결과가 화면에 출력되어야 한다.

 

2-9.jpg

 

[그림 2-9] 파이썬 스크립트 실행 결과

 

입력 파일의 모든 행이 화면에 출력되고 출력 파일에 기록된다. 그림에서 볼 수 있듯이 파이썬의 내장 csv 모듈은 데이터 값에 포함된 쉼표를 처리하고 모든 행을 5개의 데이터 값이 있는 리스트로 올바르게 파싱했다.

댓글 입력
자료실

최근 본 상품0