Hodustory/프로그래밍&DB

python 입문 : openpyxl 패키지 (파이썬으로 엑셀 읽고 쓰기)

호두밥 2018. 4. 24. 01:02

pandas, openpyxl, xlrd, xlutils, pyexcel 등 파이썬에서 엑셀을 다룰 수 있는 다양한 패키지가 있습니다. 여기서는 openpyxl을 이용해 엑셀 파일을 열고 쓰는 방법을 알아보겠습니다.[각주:1]


아래와 같이 openpyxl를 설치합니다.



   pip install openpyxl



엑셀파일 읽어들이기 


샘플 데이터로 굿뉴스 성인 목록[각주:2] 중 대천사 6명의 데이터만 가져와봤습니다. 



번호

구분

성인명  영어명 축일 신분 연도
1 천사 가브리엘 Gabriel 9월29일 대천사 +연대미상
2 천사 가브리엘라 Gabriela 9월29일 대천사 +연대미상
3 천사 라파엘 Raphael 9월29일 대천사 +연대미상
4 천사 라파엘라 Raphaela 9월29일 대천사 +연대미상
5 천사 미카엘 Michael 9월29일 대천사 +연대미상
6 천사 미카엘라 Michaela 9월29일 대천사 +연대미상



위의 데이터를 angel.xslx로 저장한 뒤 데이터를 불러와보겠습니다.


#파일을 읽어들이는 내장함수인 load_workbook을 불러옵니다.
from openpyxl import load_workbook
#파일이름이 angel.xlsx인 파일을 불러옵니다.
angelEx=load_workbook(filename='angel.xlsx')
#불러온 엑셀 파일 중 데이터를 찾을 sheet의 이름을 입력합니다.
sheet1 = angelEx['Sheet1']
#활성화되어 있는 시트를 찾습니다.
sheet2 = angelEx.active
#Sheet1의 D4의 값을 출력합니다.
print(sheet1['D4'].value)
print(sheet2['D4'].value)

#특정 범위의 데이터(번호와 성인명)만 불러오겠습니다.
angels = []
#루프문을 이용해 sheet의 여러 행에 있는 데이터를 불러옵니다.
for i in sheet1.rows:
번호 = i[0].value
성인명 = i[2].value
angel = (번호, 성인명)
angels.append(angel)

print(angels)

Raphael

Raphael

[('번호', '성인명'), (1, '가브리엘'), (2, '가브리엘라'), (3, '라파엘'), (4, '라파엘라'), (5, '미카엘'), (6, '미카엘라')]



iter_rows() 와 iter_column()를 이용해서도 특정 범위의 셀에 접근할 수 있습니다. 

allData =[]
for row in sheet1.iter_rows(min_row=2, max_col=3, max_row=4):
a = []
for cell in row :
a.append(cell.value)
allData.append(a)

print(allData)

[[1, '천사', '가브리엘'], [2, '천사', '가브리엘라'], [3, '천사', '라파엘']]

min_row,  max_row, min_col, max_col을 이용해 시작행과 마지막 행, 시작 열과 마지막 열을 지정해줍니다. 해당 조건을 빼면 모든 행렬의 데이터를 불러올 수 있습니다.


엑셀파일로 쓰고 저장하기


from openpyxl import Workbook
wb = Workbook()


#파일 이름을 정하고, 데이터를 넣을 시트를 활성화합니다.
sheet1 = wb.active
file_name = 'sample.xlsx'

#시트의 이름을 정합니다.
sheet1.title = 'sampleSheet'

abc = ['A','B','C','D','E','F','G','H','I','J','K','L']

#cell 함수를 이용해 넣을 데이터의 행렬 위치를 지정해줍니다.
for row_index in range(1, 11):
sheet1.cell(row=row_index, column=1).value = row_index
sheet1.cell(row=row_index, column=2).value = abc[(row_index-1)]

wb.save(filename=file_name)

1

A

2

B

3

C

4

D

5

E

6

F

7

G

8

H

9

I

10

J


-------------------------------

엑셀 파일의 데이터를 읽고 쓰는 방법을 다루어 보았습니다. 앞서 배운 크롤링과 연계하면 굉장히 유용하게 쓰일 듯 합니다!

 

  1. https://openpyxl.readthedocs.io/en/stable/usage.html [본문으로]
  2. http://maria.catholic.or.kr/sa_ho/list/list.asp?menugubun=saint&today=&today_tmp=&ctxtCommand=&ctxtLogOn=&ctxtSexcode=&ctxtChukday=&ctxtGaladay=&Orggubun=101&ctxtHigh=&ctxtLow=&ctxtChecked=Checked&oldrow=&curpage=1&ctxtOrder=++name1%2Cgaladaym%2Cgaladayd+&ctxtOrderType=&ctxtSaintId=&ctxtSCode=5&ctxtSearchNm=&ctxtChukmm=&ctxtChukdd=&ctxtPosition=&ctxtCity=&PSIZE=20 [본문으로]
반응형