CSV(Comma-seperated Value) 파일은 데이터를 쉼표(,)
로 구분하는 텍스트 데이터 형식입니다. 역사가 오래되었음에도, 구조가 단순하고 수많은 데이터베이스와 도구들이 CSV 형식을 지원하기 때문에 오늘날에도 가장 흔하게 사용됩니다.
CSV의 텍스트 데이터 형식으로 공백으로 데이터를 구분하는 SSC(Space-seperated Value), 탭으로 데이터를 구분하는 TSV(Tab-seperated Value)가 있습니다.
데이터에 쉼표가 포함된 CSV 파일
같은 셀에 넣을 데이터에 쉼표가 포함된 경우에는, 따옴표
(")
로 묶어 작성합니다. ex) 숫자
먼저, 구글 Colab에 파일을 업로드 하기 위해 files 라이브러리를 import합니다.
from google.colab import files
# 파일 업로드 함수 호출
f = files.upload()
CSV파일은 csv라이브러리를 활용해 다룹니다.
먼저, CSV 파일을 불러와봅시다.
f = open('characters.csv', 'r', encoding = 'cp949')
open(파일이름, rwa권한 부여, 인코딩 옵션)
CSV 파일 인코딩 옵션은 다음과 같습니다.
cp949
utf-8
csv 라이브러리를 활용해 reader()
함수로 파일을 읽습니다.
import csv
rdr = csv.reader(f)
# 반복문으로 한 행씩 출력하기
for line in rdr:
print(line)
위에서 본 바와 같이, 각 행의 데이터는 대괄호 []
로 묶여 출력되고 있습니다. 이렇게 대괄호로 묶인 데이터를 리스트 라고 합니다. 따라서 인덱싱과 슬라이싱을 이용해 특정 열만 출력할 수도 있습니다.
f = open('characters.csv', 'r', encoding = 'cp949')
rdr = csv.reader(f)
for line in rdr:
print(line[1])
파일 처리가 끝난 이후에는 close()
함수를 호출해 자원을 반환합니다.
f.close()
csv 파일 작성은 writer()
함수를 사용합니다. 이를 위해서는 파일을 불러 올 때, 두번째 인자인 권한 속성을 w(쓰기)
로 해야 합니다. 만약, 기존 파일에 이어 쓰고 싶다면, a(추가)
옵션을 입력합니다.
네 번째 인자는 newline 옵션으로, 이 옵션을 입력하지 않으면 한 행을 입력할때마다 자동으로 줄바꿈을 합니다.
import csv
# CSV 파일 불러오기
f = open('write.csv', 'w', encoding = 'cp949', newline = '')
#CSV 파일 작성할 준비하기
wr = csv.writer(f)
wr.writerow(['ID', '이름', '상징색', '취미', '특징'])
wr.writerow(['001', '뽀로로', '파랑색', '낚시', '펭귄'])
wr.writerow(['002', '에디', '주황색', '과학실험', '사막여우'])
wr.writerow(['003', '크롱', '초록색', '눈싸움', '공룡'])
wr.writerow(['004', '오구', '노란색', '놀기', '오리너구리'])
f.close()
왼쪽 Colab 디렉터리에 write.csv
파일이 만들어 진 것을 확인할 수 있습니다.
기존의 CSV 파일에 데이터를 추가해봅시다. 2번째 권한 옵션을 a
로 입력함에 주의합니다.
import csv
f = open('write.csv', 'a', encoding='cp949', newline='')
wr = csv.writer(f)
wr.writerow(['005', '포비', '파란색', '놀기', '오리너구리'])
f.close()
CSV파일은 텍스트 기반 파일인 반면 엑셀(Excel)은 확장자가 xls
또는 xlsx
이며, 엑셀 프로그램을 통해서만 열 수 있습니다. 엑셀 파일을 저장하면 그래프나 수식까지 보존하며, csv파일보다 더 많은 기능을 제공합니다.
각 칸을 셀(cell)이라 보르며, 한 화면은 Worksheet, 워크시트가 모여 하나의 엑셀 파일인 워크북(Workbook)이 됩니다.
파이썬에서 엑셀 파일을 다루는 라이브러리로 openpyxl
이나 xlrd
등이 있습니다. 우리는 openpyxl
을 활용해 엑셀 파일을 다뤄보겠습니다.
셀 번호를 지정해 이미지 또는 문자열을 입력할 수 있고, 엑셀 시트에서 데이터를 복사해 다른 시트에 붙여 넣거나, 시트를 추가 또는 삭제할 수도 있습니다.
from google.colab import files
f = files.upload()
#openpyxl 라이브러리 설치하기
!pip install openpyxl
#openpyxl 라이브러리 가져오기
import openpyxl
wb = openpyxl.load_workbook('characters.xlsx')
pip
: 파이썬 패키지 설치 명령어엑셀 파일의 워크북에는 한개 이상의 워크시트의 셀에 행렬 형태로 저장되어 있습니다. 따라서 접근할 데이터의 위치를 정확하게 지정해야 합니다. 먼저, 워크시트 목록을 확인합니다.
print(wb.sheetnames)
이제 특정 위치의 데이터를 읽어봅시다. 만약, sheet1 워크시트의 A1셀에 저장된 값을 불러오고 싶다면, 다음과 같이 입력합니다.
sheet1 = wb['Sheet1']
print(sheet1['A1'].value)
이제 openpyxl 라이브러리를 활용해 엑셀 파일에 데이터를 추가하거나, 수정해봅시다. 워크시트 단위로 조작하거나 활용할 수도 있습니다.
Workbook()
함수로 워크북을 생성합니다.
wb = openpyxl.Workbook()
워크북 객체 wb가 생성되며, 엑셀 파일에는 최소 1개의 워크시트가 존재하므로, wb안에 워크시트 Sheet가 자동으로 생성됩니다.
Sheet2라는 이름의 워크시트를 생성하고, 워크시트 목록들을 확인해봅시다.
wb.create_sheet('Sheet2')
print(wb.sheetnames)
다음과 같이 'Sheet', 'Sheet2' 워크시트가 잘 생성된 것을 확인할 수 있습니다.
Sheet 워크시트의 이름을 '캐릭터 명단'으로, Sheet2 워크시트의 이름을 '인기도 조사'로 바꾸고, 이를 확인해봅시다.
각 워크시트를 변수에 담고, title 속성을 변경합니다.
sheet1 = wb['Sheet']
sheet2 = wb['Sheet2']
sheet1.title = '캐릭터 명단'
sheet2.title = '인기도 조사'
print(wb.sheetnames)
워크시트와 셀 위치 지정에 주의하며 B1에 내용을 추가해봅시다.
sheet2['B1'] = '인기도 조사결과'
print(sheet2['B1'].value)
copy_worksheet()
함수는 워크시트를 복제하여 반환합니다. 해당 함수를 이용해 워크시트를 복제하고, 복제한 워크시트의 이름을 변경해봅시다.
copysheet = wb.copy_worksheet(sheet2)
print(wb.sheetnames)
# 복제 시트의 이름 변경
copysheet.title = 'copy'
print(wb.sheetnames)
print(copysheet['B1'].value)
del wb['시트 이름']
함수로 워크시트를 삭제해봅시다.
del wb['인기도 조사']
print(wb.sheetnames)
수정 작업이 완료되었다면, 엑셀 파일을 저장해봅시다. save()
함수를 이용해 저장합니다.
wb.save('complete.xlsx')
Colab 탐색 창의 디렉토리에 'complete.xlsx' 파일이 생성된 것을 볼 수 있습니다.