A. Programming/Python

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

_DK_ 2022. 1. 6. 12:00
반응형
천재가 따로 있는 것이 아니라 메모광이 있을 뿐이다.
- 아리스토텔레스


  이전 글에서 1~45까지의 정수 중 6개를 랜덤으로 뽑아주는 가장 기본적인 로또 번호 생성 프로그램을 만들어 보았습니다.

[A. Programming/Python] - [파이썬 코딩 #1] 랜덤 숫자 생성 - 로또(Lotto) 번호 생성 프로그램 - 1

 

[파이썬 코딩 #1] 랜덤 숫자 생성 - 로또(Lotto) 번호 생성 프로그램 - 1

천리길도 한 걸음부터 - 한국 속담 앞선 글들을 통해서 파이썬 코딩을 하기 위해서 알아두면 좋을 기초 지식에 대해서 적어보았습니다. [A. Programming/Python] - [파이썬 기초] 자료형과 변수 [파이썬

yongbba.tistory.com

 

  이번에는 생성한 랜덤 번호를 텍스트 파일이나 엑셀로 저장할 수 있는 프로그램을 만들어 보려고 합니다. 하나의 번호를 생성하기 위한 프로그램이라면 크게 의미는 없을 수 있지만 여러 번 번호를 생성하거나 당첨 여부를 기록하기 위해서는 좋은 방법이 될 수 있습니다.

 

  사실 코딩에서 파일 입출력은 매우 자주 사용되는 방법입니다. 일회용 프로그램이라면 한번의 사용 후 결과물을 저장할 필요가 없겠지만, 꾸준하게 사용하는 프로그램이라면 저장은 필수적이라고 볼 수 있습니다.

 

  그 중 가장 간단하면서 효율적인 텍스트 파일로 저장하는 방법에 대해서 먼저 알아보려고 합니다.

 

 파이썬 텍스트 파일로 저장해 보기

 

  어떤 방식으로든 저장을 하기 위해서는 무엇보다 어느 곳에 저장을 할 것인가가 제일 중요합니다. 어디에 저장을 하는지를 알고 저장을 해야 저장한 것을 읽고 활용할 수 있을 것입니다.

 

  코딩을 할 때 흔히 사용하는 파일 경로에는 상대경로(Relative Paht)절대경로(Absolute Path)가 있습니다. 상대경로는 해당 프로그램의 현재 위치를 기준으로 정해지는 경로이며, 절대경로는 파일이 가지는 변하지 않는 경로로 프로그램의 어떤 위치에서든 동일하며 변하지 않습니다.

 

 

 상대경로로 텍스트 파일 저장하기

 

  예제를 통해 상대경로와 절대경로가 어떻게 다른지에 대해서 조금 더 알아보도록 하겠습니다. 먼저 상대경로를 사용해서 텍스트 파일을 저장해보도록 하겠습니다.(파이썬 os 모듈이 가지고 있는 getcwd() 함수를 이용하면 프로그램의 현재 위치를 알아볼 수 있습니다.)

 

import os

print(os.getcwd())

 

  위와 같이 확인을 해보면 현재 python이 "C:\Users\user"의 위치에서 실행되고 있는 것을 알 수 있습니다. 상대 경로를 활용하여, "C:\Users\user\" 경로에 'test.txt' 파일을 만들어 보도록 하겠습니다. 파이썬에서 제공하는 함수 중 open() 함수를 이용하여 파일을 생성하고 이용할 수 있으며, 함수에 대한 자세한 내용은 help() 함수를 이용하거나 아래의 사이트에서 확인할 수 있습니다.

 

- https://docs.python.org/ko/3/library/functions.html?open#open

 

내장 함수 — Python 3.10.1 문서

내장 함수 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형이 내장되어 있습니다. 여기에서 알파벳 순으로 나열합니다. abs(x) 숫자의 절댓값을 돌려줍니다. 인자는 정수, 실수 또는 __

docs.python.org

 

  관련 설명 중 아래의 내용을 보면 파일을 어떤 방식으로 오픈할지를 옵션을 통해서 결정을 할 수 있습니다.(한글 번역이 다소 어색한 경우에는 영문으로 된 사이트나 help() 함수를 이용하여 사용하시는 걸 추천드립니다.)

 

file = open('test.txt', 'w')
file.close()

type(file)
help(file)

 

 

  위의 예제와 같이 실행을 하면 'test.txt'란 이름의 파일이 "C:\Users\user" 경로에 생성되는 것을 확인할 수 있습니다.(사용자의 환경에 따라서 경로는 달라질 수 있으며, os.getcwd()로 확인한 경로에 생성이 됩니다.) 파일을 오픈하여 사용한 후에는 close() 함수를 이용하여 파일을 닫아주어야 합니다.(type() 함수와 help() 함수를 통해 TextIOWrappper 클래스의 함수들에 대한 더 자세한 설명을 확인해 볼 수 있습니다.)

 

 

 절대경로로 텍스트 파일 저장하기

 

  이번에는 동일한 코드를 절대경로를 사용해서 텍스트 파일을 저장해보도록 하겠습니다.

 

file = open('C:/Users/user/test2.txt', 'w')
#file = open('C:\\Users\\user\\test2.txt', 'w')
file.close()

 

  상대경로를 이용하여 만든 파일과 구분하기 위해 'test2.txt'라는 파일 이름으로 생성을 해보았으며, "C:\Users\user" 경로에 동일하게 'test2.txt' 파일이 생성된 것을 확인할 수 있습니다. 여기서 주의하여야 하는 점은 경로에 포함된 '\' 문자는 '/' 문자나 '\\'로 바꿔서 사용하여야 합니다.

 

  위에서 알아본 것과 같이 상대경로나 절대경로 중 어떤 것을 사용하더라도 상관은 없지만 상대경로를 이용할 때는 항상 어디에서 실행되는 것인지 확인이 필요합니다.

 

 

 로또 랜덤 숫자 텍스트 파일로 저장하기

 

  이번에는 이전 글에서 알아보았던 랜덤 숫자 생성과 합쳐서 생성된 번호를 텍스트 파일에 저장을 해보도록 하겠습니다.

[A. Programming/Python] - [파이썬 코딩 #1] 랜덤 숫자 생성 - 로또(Lotto) 번호 생성 프로그램 - 1

 

[파이썬 코딩 #1] 랜덤 숫자 생성 - 로또(Lotto) 번호 생성 프로그램 - 1

천리길도 한 걸음부터 - 한국 속담 앞선 글들을 통해서 파이썬 코딩을 하기 위해서 알아두면 좋을 기초 지식에 대해서 적어보았습니다. [A. Programming/Python] - [파이썬 기초] 자료형과 변수 [파이썬

yongbba.tistory.com

 

  먼저 "C:\TEST\Lotto"의 경로에 'data'라는 폴더와 지난 글에서 만들어 보았던 'Lotto.py' 파일을 저장해보도록 하겠습니다.

 

 

  지난번에 만들어 본 'Lotto.py' 파일에 이어서 아래의 코드를 추가하여 실행해 보겠습니다.

import random

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

writeFile = open('C:/TEST/Lotto/data/data.txt', 'w')
for i in lottoNum:
    writeFile.write(str(i) + " ") 
writeFile.close()

readFile = open('C:/TEST/Lotto/data/data.txt', 'r')
readNum = readFile.readline()
print(readNum)
readFile.close()

 

  위의 코드를 실행하면 1~45까지의 정수 중 6개의 번호를 랜덤으로 뽑은 후 "C:\TEST\Lotto\data" 경로의 'data.txt' 파일에 저장이 되고, 이를 다시 읽은 후 출력을 시켜줍니다. 이 프로그램은 실행할 때마다 새로운 로또 번호를 생성하고 이것을 'data.txt' 파일에 저장하게 됩니다. 여기서 open() 함수의 옵션에 따라 실행할 때마다 데이터가 추가될 수도 계속 추가되도록 변경할 수도 있습니다.('w' 옵션이 아닌 'a' 옵션을 사용할 경우, 이전 데이터를 유지한 채로 계속 저장을 할 수 있습니다.)

 

writeFile = open('C:/TEST/Lotto/data/data.txt', 'w') # (1)
for i in lottoNum:                                   # (2)
    writeFile.write(str(i) + " ")
writeFile.close()                                    # (3)

  위에서 작성한 코드에 대해서 조금 더 자세히 알아보면, (1) 먼저 저장을 하기 위한 텍스트 파일을 먼저 생성하고, (2) list에 저장된 숫자를 하나씩 파일에 저장합니다.(뒤의 숫자와 구분을 하기 위해서 스페이스(" ")를 추가하였습니다.) (3) 저장을 완료하고 파일을 닫습니다.

 

readFile = open('C:/TEST/Lotto/data/data.txt', 'r') # (4)
readNum = readFile.readline()                       # (5)
print(readNum)                                      # (6)
readFile.close()                                    # (7)

 

  (4) 저장된 파일을 읽기 위해 텍스트 파일을 읽기 모드로 열고, (5) 파일을 한 줄 읽습니다. (6) 읽은 데이터를 출력하고, (7) 읽기 위해 열었던 파일을 닫습니다.

 

  이번 글에서는 프로그램에서 파일을 읽고 쓰는 가장 기본적인 부분에 대해서 알아보았습니다. 텍스트 파일이 가장 간단하게 데이터를 저장하고 활용할 수 있는 방법이지만, 사용자가 이 텍스트 파일을 직접 보고 활용하기는 쉽지 않습니다.

 

  파이썬에서는 많은 사람들이 사용하는 엑셀 파일로도 간단하게 저장하고 이를 사용하는 기능들을 제공하고 있는데, 다음 글에서는 엑셀 파일로 저장하고 이를 이용하는 것에 대해서 알아보려고 합니다.

 

 

 

반응형