CSV 파일은 Comma Separated Values 의 줄임말이고 뜻은 콤마 , 로 구분하는 값을 말한다.
엑셀파일에서 열 수 있다. 회사나 기관에서 엑셀을 많이 쓰는데 xlsx 파일만 있는게 아니라 csv 파일도 있다.
엑셀로 열어보면 외관은 거의 똑같다. CSV파일은 기본 엑셀파일과는 내부적인 데이터 구조가 다르다.
CSV 간단한 구조로 인해 데이터를 취급하는 것이 용이하다고 한다. 오래전 부터 사용되던 표준 데이터 구조로 이미 많은 자료들이 CSV로 저장되어 있다. 특히 파이썬에서는 데이터 분석 툴인 PANDAS와 같이 사용할 수 있기에 유용성이 높다.
https://ko.wikipedia.org/wiki/CSV_(%ED%8C%8C%EC%9D%BC_%ED%98%95%EC%8B%9D)
텍스트파일로 열어 볼 수도 있다. 열어보면 말 그대로 콤마 , 로 구분되어 있다. 콤마를 delimiter 구분자로 사용한 데이터 구조이다. 한 줄이 행이고 콤마 구분으로 열로 나누어진다.
여기서 사용한 CSV 파일은 인터넷에서 검색되는 스포츠 선수 명단 자료를 사용했다.
import csv,os
os.chdir('D:\\')
print(os.getcwd())
csvFile = open('speeduni.csv','r',newline='',encoding='ANSI')
csvReader = csv.reader(csvFile)
csvData = list(csvReader)
for index,read in enumerate(csvData):
print(index, " : ", read)
파일이 있는 D드라이브로 이동하여 파일을 연 객체를 csv.reader 메소드에 넘겨준다. 일련의 과정이 복잡해보인다.
파이썬은 고수준 언어의 입장으로 생각하는 습관이 필요하다.
우선 csv 모듈을 import 한다. 이는 기본 파이썬 패키지에서 설치된다. 따로 설치할 필요가 없다.
파일 speeduni.csv 파일을 연다. 'r' 모드로 보면 텍스트 파일로 여는 것이다. newline과 encoding은 환경에 따라 넣지 않아도 실행된다. 옵션 설정 같은 것이다.
파일을 파이썬 빌트인 함수로 열어서 csv 에게 넘겨준다는 것에 주목한다. csv.reader 가 파일을 받아서 파싱(parsing) 작업을 하여 다시 객체를 돌려준다. 이 객체는 _csv.reader 클래스로 list로 바꾼다. list로 바꿔지는 자료형이 있고 안바뀌는 자료형도 있다. 여기서는 list가 가능하다.
리스트인 csvData로 아래와 같이 사용가능하다.
이제 2차원 배열법으로 각 요소에 접근할 수 있다. 엑셀에서 보면 셀이다.
csvData[0][0]
csvData[0][1]
csvData[0][2]
..
셀 A1은 [0][0] 이다. 셀 B1은 [0][1]이다. 행과 열(row and column)으로 구분되어 있다는 것을 알 수 있다. 이제 리스트에 할당하는 것으로 값을 조작할 수 있다.
csvData[1][1] ="훈련코치"
주의할 점은 csvData는 파일의 객체를 리스트로 바꾼 것이므로 실제 파일에 영향을 미치지 못한다. 저장을 위해서는 쓰기모드로 파일을 열어서 기록해야 한다.
예제> 행을 선택하여 출력하기
아래와 같은 코드로 출력할 수 있다. 2차원 리스트로 출력하므로 특정 셀을 추출하는 것도 가능하다. 예를 들어 이름만 추출한다거나 학교만 추출할 수도 있다. 파이썬으로 CSV 자료를 끌고온 이상 조금 더 손이 가겠지만 스프테드시트에서 하지 못하는 많은 일을 할 수 있다.
기본적으로 데이터를 가지고 할 수 있는 작업은 무한하다 아이디어가 부족할 뿐
row = int(input('Insert a row to print : \n'))
for i in range(len(csvData[row])):
print(csvData[row][i], end=', ')
변경된 사항을 새로운 파일에 저장한다. 쓰기 모드로 새로운 파일을 만든다. 주의할 점은 encoding 이 같아야 한다. ANSI 모드로도 한글 사용이 지장이 없기 때문에 그대로 사용했다.
파일을 쓰기위해 writer 객체에 리스트 파일을 쓴다. (writerow 메서드) 그리고 파일을 닫아주면 된다.
import csv,os
os.chdir('D:\\')
print(os.getcwd())
csvFile = open('speeduni.csv','r',newline='',encoding='ANSI')
csvReader = csv.reader(csvFile)
print(type(csvReader))
print(csvReader)
csvData = list(csvReader)
print(csvData[1][1])
csvData[1][1] ="훈련코치"
csvFile2 = open('new.csv','w',newline='',encoding='ANSI')
writer = csv.writer(csvFile2)
writer.writerows(csvData)
csvFile.close()
csvFile2.close()
값이 기존 '총감독'에서 '훈련코치'로 변경된 것을 볼 수 있다. 새로운 파일은 동일한 디렉토리에 new.csv 파일로 생겼다.
CSV 관련하여 좀 더 복잡하고 세부적인 내용들이 궁굼하면 아래 파이썬 공식문서와 온라인 튜토리얼을 참고하면 좋을 것이다.
* 참고문서 : 파이썬 DOC CSV (공식문서)
https://docs.python.org/ko/3/library/csv.html
https://python101.pythonlibrary.org/chapter13_csv.html
https://realpython.com/python-csv/
https://www.kite.com/python/docs/csv
http://zetcode.com/python/csv/
https://www.youtube.com/watch?v=q5uM4VKywbA
https://www.youtube.com/watch?v=Xi52tx6phRU
CSV는 쓰임새도 많고 기본 모듈이라 온라인 강의만으로도 충분히 습득할 수 있을 것이다. CSV 모듈과 판다스 MYSQL도 같이 쓰기 때문에 관련 개발하는 사람들은 금방 익숙해질 것이다.