A. Programming/Python

[파이썬 코딩 #3] 엑셀 파일 저장하기 - 로또(Lotto) 번호 생성 프로그램 - 3

_DK_ 2022. 1. 12. 12:00
반응형
우리는 배워야 할 것을 직접 해보면서 배운다.
- 토머스 제퍼슨

 

  이전 글에서는 파이썬의 텍스트 저장 방법을 통해 랜덤으로 생성한 로또 번호를 저장하는 방법에 대해 알아보았습니다.

[A. Programming/Python] - [파이썬 코딩 #2] 텍스트 파일 저장하기 - 로또(Lotto) 번호 생성 프로그램 - 2

 

[파이썬 코딩 #2] 텍스트 파일 저장하기 - 로또(Lotto) 번호 생성 프로그램 - 2

천재가 따로 있는 것이 아니라 메모광이 있을 뿐이다. - 아리스토텔레스 이전 글에서 1~45까지의 정수 중 6개를 랜덤으로 뽑아주는 가장 기본적인 로또 번호 생성 프로그램을 만들어 보았습니다.

yongbba.tistory.com

 

  로또 번호와 같이 생성한 데이터를 저장하기 위해서는 앞서 알아본 텍스트 파일 외에도 데이터베이스(DB, DataBase)나 엑셀(Excel) 파일 등 다양한 방법이 존재합니다. 그중에서 일반인들도 많이 사용하는 엑셀 파일로 저장하고 사용하는 방법에 대해서 알아보려고 합니다.

 

  파이썬은 여러 모듈을 통해 엑셀 파일을 사용하는데 강점을 가지고 있는데, 이에 대해서 알아보려고 합니다.

 

 

 파이썬 엑셀 파일로 저장해 보기

 

  파이썬에서 엑셀 파일을 저장하고 이용하기 위해서 사용할 수 있는 모듈을 매우 다양하게 존재합니다. 그 중에서 'openpyxl' 모듈을 이용하여 엑셀 파일을 저장하고 사용하는 방법에 대해서 알아보려고 합니다.

 

 

 openpyxl 모듈 설치하기

 

  파이썬에서 기본적으로 제공하는 모듈이 아닌 다른 모듈을 이용하기 위해서는 설치를 먼저 해주어야 합니다. 파이썬에서는 'pip'라는 파이썬 패키지 매니저를 이용하여 간단하게 모듈을 설치하거나 삭제 등을 수행할 수 있습니다.

 

  가장 먼저 cmd 창을 실행 후 "python -m pip install --upgrade pip" 명령어를 통해 pip를 업그레이드 한 후 진행하도록 하겠습니다.(매번 해줄 필요는 없으며, 만약 pip 실행 시 버전이 낮을 경우 업그레이드를 할 수 있다는 메시지가 나옵니다.)

 

 

  이제 "pip install openpyxl" 이란 명령어를 통해 openpyxl 모듈을 설치해보도록 하겠습니다.

 

 

  위와 같이 진행이 되면 openpyxl 모듈이 설치가 완료된 것이며, 이제 이 모듈을 사용하여 코딩을 할 수 있는 환경이 되었습니다.

 

 

 openpyxl 모듈 이용하여 엑셀 파일 저장하기

 

  가장 먼저 엑셀 파일을 생성하고 저장하는 방법에 대해서 알아보도록 하겠습니다.

 

import openpyxl

wb = openpyxl.Workbook()

wb.save('C:/Users/user/test.xlsx')

 

  위의 예제와 같이 실행하면 "C:\Users\user" 경로에 'test.xlsx' 파일이 생성되는 것을 확인해보실 수 있습니다. openpyxl 모듈에서 제공하는 Workbook() 함수를 이용하여 엑셀 파일을 하나 만든 후, 이것을 'test.xlsx'이라는 이름으로 저장을 해준 것입니다. 여기서 주의할 점은 openpyxl의 경우 '.xls' 확장자를 지원하지 않기 때문에 '.xlsx'와 같은 확장자로 사용을 해주어야 문제없이 동작할 수 있습니다.

 

  저장한 엑셀 파일을 읽고 사용하는 방법에 대해서도 조금 알아보도록 하겠습니다.

 

import openpyxl

wb = openpyxl.load_workbook('C:/Users/user/test.xlsx')  # (1)

ws = wb.active                                          # (2)
print(ws.title)

ws.title = "Lotto Number"                               # (3)
print(ws.title)

wb.save('C:/Users/user/test.xlsx')                      # (4)

 

  위의 예제와 같이 작성 후 실행하면 'test.xlsx'의 시트명이 기본으로 설정되는 "Sheet"에서 "Lotto Number"로 변경되어 저장된 것을 확인하실 수 있습니다. 위의 코드에 대해서 조금 더 설명 드리면 (1) openpyxl 모듈에서 제공하는 load_workbook() 함수를 통해 "C:\Users\user\test.xlsx" 파일을 열고, (2) 엑셀 파일(test.xlsx)에서 현재 사용중인 시트를 가져옵니다. (3) 이후 시트의 이름을 "Lotto Number"로 설정한 후, (4) 다시 'test.xlsx'로 저장합니다.

 

  이 외에도 openpyxl에서 제공하는 기능들은 매우 다양하고 많지만, openpyxl 모듈의 모든 기능을 배우려고 하는 것이 목적이 아닌 만큼 여기까지 알아본 후 로또 번호를 파일로 저장하는 부분으로 넘어가 보도록 하겠습니다.

 

 

 로또 번호 엑셀 파일로 저장하기

 

  위에서는 엑셀 파일을 만들고, 시트의 이름을 바꿔보는 과정까지 해보았습니다. 여기서는 이제 앞에서 해보았던 랜덤으로 생성한 로또 번호를 텍스트 파일이 아닌 엑셀 파일로 저장해보는 과정을 해보려고 합니다.

 

[A. Programming/Python] - [파이썬 코딩 #2] 텍스트 파일 저장하기 - 로또(Lotto) 번호 생성 프로그램 - 2

 

[파이썬 코딩 #2] 텍스트 파일 저장하기 - 로또(Lotto) 번호 생성 프로그램 - 2

천재가 따로 있는 것이 아니라 메모광이 있을 뿐이다. - 아리스토텔레스 이전 글에서 1~45까지의 정수 중 6개를 랜덤으로 뽑아주는 가장 기본적인 로또 번호 생성 프로그램을 만들어 보았습니다.

yongbba.tistory.com

 

  먼저 지난 글에서 작성해 본 'Lotto.py'를 열어 아래와 같은 코드로 바꿔서 작성해보도록 하겠습니다.

 

import random
import openpyxl

lottoNum = random.sample(range(1, 46), 6)
lottoNum.sort()
print(lottoNum)

wb = openpyxl.Workbook()
ws = wb.active

ws.title = "Lotto Number"
ws['A1'] = "회차"                                             # (1)
for i in range(1, 7):                                         # (2)
    ws.cell(1, i+1, "숫자" + str(i))
ws['A2'] = 998                                                # (3)
for i in range(6):                                            # (4)
    ws.cell(2, i+2, lottoNum[i])

wb.save('C:/TEST/Lotto/data/data.xlsx')                       # (5)

wb2 = openpyxl.load_workbook('C:/TEST/Lotto/data/data.xlsx')  # (6)
ws2 = wb2.active

readNum1 = ws2.cell(2, 1).value                               # (7)
readNum2 = []                                                 # (8)
cell = ws2['B2' : 'G2']                                       # (9)
for row in cell:                                              # (10)
    for cell in row:
        readNum2.append(cell.value)

print(readNum1)
print(readNum2)

 

  위의 예제와 같이 작성하여 실행하면 아래와 같은 'data.xlsx' 파일이 생성되는 것을 확인하실 수 있으며, 엑셀 파일에 로또 번호가 동일하게 저장된 것을 확인하실 수 있습니다. 아직은 랜덤으로 생성한 하나의 숫자만을 저장하도록 되어 있으며, 회차 정보도 같이 넣어보았습니다. 엑셀 내의 셀에 값을 읽거나 저장하는 방법은 매우 다양한데 그중에서 몇 가지를 섞어가며 작성을 해보았습니다.(앞으로 코드를 계속 작성해나가면서 다른 방법으로도 작성해볼 예정입니다.)

 

 

  위의 예제 중 이번 글에서 추가적으로 작성된 부분들에 대해서 간략하게 설명드리면 아래와 같은 동작을 합니다.

 

  (1) 엑셀 파일의 'Lotto Number'라는 시트의 첫번째 'A1' 셀에 "회차"란 문구를 씁니다.

  (2) for ~ in range() 구문을 이용하여 '숫자1' ~ '숫자6'을 'B1' ~ 'G1'에 씁니다.

  (3) 'A2' 셀에 998이란 숫자를 씁니다.(로또 회차에 대한 번호입니다.)

  (4) 랜덤으로 생성하였던 6개의 로또 번호를 'B2' ~ 'G2'에 씁니다.

  (5) 엑셀 파일을 "C:\TEST\Lotto\data" 경로에 'data.xlsx'란 이름으로 저장합니다.

  (6) 저장했던 'data.xlsx' 파일을 열고, 시트를 선택합니다.(여기서는 하나의 시트만 있기 때문에 단순히 active만 하면 되지만, 만약 여러 개의 시트가 존재할 경우에는 시트를 먼저 선택해주어야 합니다.)

  (7) 선택된 시트에서 'A2'에 해당하는 값을 읽습니다.

  (8) 엑셀에 저장된 로또 번호를 읽어오기 위해 리스트 객체를 만듭니다.

  (9) 엑셀 시트의 'B2' ~ 'G2'까지의 값을 읽습니다.

  (10) 'B2' ~ 'G2'에서 읽은 값을 (8)에서 생성한 리스트 객체에 넣어줍니다.(범위로 값을 가져올 경우에는 추가적인 과정을 거쳐야 셀의 값을 읽어올 수 있습니다.)

 

  이번 글을 통해서 로또 번호를 생성하고 이것을 엑셀 파일로 저장하는 방법에 대해서 알아보았습니다. 하지만 위의 코드로는 한 줄의 로또 번호만 생성하여 저장이 되는데, 다음 글에서는 이를 조금 보완할 수 있는 방법을 알아보려고 합니다.

 

 

 

반응형