Python openpyxl 엑셀 읽기, 쓰기 방법

엑셀에서 반복작업으로 시간 버리기 싫은 분들은 Python으로 Excel 조작하는 방법 배워보세요. 오늘은 openpyxl을 사용해서 기본적으로 필요한 엑셀 읽기/쓰기 방법을 알아보도록 하겠습니다.

Python openpyxl 엑셀 읽기

엑셀 파일을 읽어서 workbook으로 불러오는 방법은 다음과 같이 간단합니다. 파일에서 워크북을 읽고 워크시트를 얻어옵니다.

from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
ws1 = wb.active
Python

시트를 불러오는 것과 관련된 내용은 Python openpyxl 시트 추가, 삭제 등 9가지 조작 방법 문서에서 자세히 다루었으니, 해당 문서를 참고하시기 바랍니다.

시트의 값 읽기

그럼 이제 특정 시트를 선택했으니, 값들을 불러와야겠죠. 우선 시트 1은 구글의 주가 정보로 간단히 준비해 보았습니다.

그림 2. 엑셀에 불러온 약 한 달치 GOOG 주가(일봉) 정보
그림 2. 엑셀에 불러온 약 한 달치 GOOG 주가(일봉) 정보

특정 셀 읽기

먼저 시트의 특정 셀의 값을 불러오는 방법입니다. A3의 값을 확인해 보겠습니다.

print(ws1['A3'].value)
Python

datetime.datetime으로 변환되어 날짜 객체 값으로 처리돼 있는 것을 볼 수 있습니다.

그림 3. 특정 셀의 값 확인
그림 3. 특정 셀의 값 확인

특정 행 읽기

이번엔 3 행(row)의 셀 객체를 모두 읽어보겠습니다.

ws1['3']
Python

아래와 같이 3행의 모든 셀 객체를 얻어옵니다.

그림 4. 특정 행 읽기
그림 4. 특정 행 읽기

특정 열 읽기

이번엔 A 열(column)을 셀 객체를 불러오겠습니다.

ws1['A']
Python

아래와 같이 A 열의 모든 셀 객체를 얻어옵니다.

그림 5. 특정 열 읽기
그림 5. 특정 열 읽기

특정 행의 값 읽기

그런데 여러분이 필요한 건 셀 객체가 아니고, 셀에 들어있는 값이죠.

for cell in ws1['3']:
  print(cell.value)
Python

3행의 값들은 아래와 같이 확인할 수 있습니다.

그림 6. 특정 행의 값 읽기
그림 6. 특정 행의 값 읽기

특정 열의 값 읽기

그리고 A 열의 값들은 아래와 같이 확인할 수 있습니다.

for cell in ws1['A']:
  print(cell.value)
Python

아래와 같은 식으로 출력이 주루룩 됩니다.

그림 7. 특정 열의 값 읽기
그림 7. 특정 열의 값 읽기

행과 열의 모든 데이터 읽어오기

하지만 행과 열 따로 지정해서 부르기 귀찮고, 난 그냥 한번에 다 긁어오면 좋겠다고 생각하는 분들 계시죠? 코드 나갑니다.

ws1.values
Python

너무 간단하죠? 하지만 출력해 보면 아래와 같이 주소 값만 찍히는 제너레이터 오브젝트라고 알려줍니다.

그림 8. 행과 열의 모든 데이터 읽기
그림 8. 행과 열의 모든 데이터 읽기

여러분이 분석에 사용하거나 Python에서 활용할 list 객체로 변환해 주어야 python에서 값을 편하게 활용할 수 있겠죠? for loop을 사용해서 변환해 줍니다.

items = []
for row in ws1.values:
  day_items = []
  for value in row:
    day_items.append(value)
  items.append(day_items)
Python

아래와 같은 list 객체로 전환되었습니다.

그림 9. Python openpyxl 행과 열의 모든 값 변환(for loop)
그림 9. Python openpyxl 행과 열의 모든 값 변환(for loop)

하지만 이것도 귀찮습니다. map을 사용하면 좀 더 간편하게 변환할 수 있습니다.

items = list(map(lambda x: x, ws1.values))
Python

for loop으로 변환했을 때와 살짝 달라진 것 보이나요? 여기에서는 tuple 객체들을 담고 있는 list 객체로 반환이 됩니다.

그림 10. Python openpyxl 행과 열의 모든 값 변환(map활용)
그림 10. Python openpyxl 행과 열의 모든 값 변환(map활용)

Python openpyxl 셀 값 변경하기

특정 셀의 값은 다음과 같이 바꿀 수 있습니다.

ws1['A1'].value = 'Date'
Python

저는 1행의 값을 모두 바꿀 건데 위처럼 하면 중복이 많이 생기죠? 아래의 코드를 사용해서 간단히 1행의 제목값을 영문으로 변경해 보겠습니다.

columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
for idx, cell in enumerate(ws1['1']):
  cell.value = columns[idx]
Python

Python openpyxl 엑셀 쓰기

저장하는 방법은 매우 간단합니다. 아래 코드와 같이 저장할 workbook에 save 메소드를 사용해서 파일이름을 파라미터로 넘겨주면 됩니다.

wb.save("example.xlsx")
Python

엑셀에서 파일을 열어보면 위에서 업데이트한 1행의 값들이 달라진 것을 확인할 수 있습니다.

그림 11. 바뀐 제목 줄 확인
그림 11. 바뀐 제목 줄 확인

템플릿으로 저장

만약 현재 작성한 workbook을 템플릿으로 저장하고 싶다면, 다음과 같이 하면 됩니다.

from openpyxl import Workbook
wb = Workbook()
wb.template = True
wb.save('example_template.xltx')
Python

관련 자료

라이브러리 사용법은 openpyxl 공식 문서를 참고했습니다. 그리고 알파벳 C(GOOG)의 주가 데이터는 인베스팅닷컴의 자료를 사용했습니다.

같이 읽으면 좋은 글

Leave a Comment