[빅데이터프로그래밍] Ch03 - 파일 입출력

Ogu·2023년 9월 12일
0
post-thumbnail

CSV 파일

CSV(Comma-seperated Value) 파일은 데이터를 쉼표(,)로 구분하는 텍스트 데이터 형식입니다. 역사가 오래되었음에도, 구조가 단순하고 수많은 데이터베이스와 도구들이 CSV 형식을 지원하기 때문에 오늘날에도 가장 흔하게 사용됩니다.
CSV의 텍스트 데이터 형식으로 공백으로 데이터를 구분하는 SSC(Space-seperated Value), 탭으로 데이터를 구분하는 TSV(Tab-seperated Value)가 있습니다.

데이터에 쉼표가 포함된 CSV 파일

같은 셀에 넣을 데이터에 쉼표가 포함된 경우에는, 따옴표 (")로 묶어 작성합니다. ex) 숫자

파이썬으로 CSV 파일 다루기

먼저, 구글 Colab에 파일을 업로드 하기 위해 files 라이브러리를 import합니다.

from google.colab import files

# 파일 업로드 함수 호출
f = files.upload()

CSV 라이브러리

CSV파일은 csv라이브러리를 활용해 다룹니다.

먼저, CSV 파일을 불러와봅시다.

f = open('characters.csv', 'r', encoding = 'cp949')

open(파일이름, rwa권한 부여, 인코딩 옵션)

CSV 파일 인코딩 옵션은 다음과 같습니다.

  • window - cp949
  • 맥 OS, 리눅스 : utf-8

CSV 파일 읽기

csv 라이브러리를 활용해 reader() 함수로 파일을 읽습니다.

import csv

rdr = csv.reader(f)

# 반복문으로 한 행씩 출력하기
for line in rdr:
  print(line)

CSV와 리스트 - 특정 열 출력

위에서 본 바와 같이, 각 행의 데이터는 대괄호 [] 로 묶여 출력되고 있습니다. 이렇게 대괄호로 묶인 데이터를 리스트 라고 합니다. 따라서 인덱싱과 슬라이싱을 이용해 특정 열만 출력할 수도 있습니다.

f = open('characters.csv', 'r', encoding = 'cp949')
rdr = csv.reader(f)

for line in rdr:
  print(line[1])

파일 처리가 끝난 이후에는 close() 함수를 호출해 자원을 반환합니다.

f.close()

파이썬으로 CSV 파일 작성하기

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' 파일이 생성된 것을 볼 수 있습니다.

profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글