티스토리 뷰

마지막으로 배울 내용은 외장 함수입니다.

내장 함수와는 다르게 외장 함수를 사용하기 위해서는 반드시 해당 모듈을 import 해야 합니다. 먼저 파이썬에서 제공되는 모듈을 살펴보기 위해 구글에서 "list of python modules" 로 검색합니다.

 

검색 결과 첫 페이지에 나오는 공식 홈페이지의 Python Module Index 페이지를 방문하면 파이썬에서 사용할 수 있는 모듈 목록이 알파벳 순으로 정렬되어 나오며 모듈을 선택하면 사용 가능한 함수들에 대해 설명 및 예제 코드를 확인할 수 있습니다.

 

예를 들어서 random 모듈에서 사용가능한 함수 정보를 확인하기 위해 상단의 r 을 클릭하고 이어서 페이지에 나타나는 random 을 클릭합니다.

 

모듈 페이지는 다음과 같이 상단에 요약 정보와 파이썬 설치 경로 내의 파일 위치 (Lib/random.py) 가 표시되며, 이어서 모듈에 대한 자세한 설명이 제공됩니다. 스크롤을 조금 더 내리면 모듈 내에서 사용 가능한 함수들 및 예제 코드를 확인할 수 있습니다.

 

모듈은 굉장히 유용하면서도 그 수가 많기 때문에 어떤 것들이 있는지 많이 알면 알수록 유리하지만 모두 외울 수는 없으므로 한 번쯤 모듈 이름 정도는 훑어보시는 편이 좋습니다.

 

실습을 위해 자주 사용되는 몇 가지 모듈을 사용해보겠습니다.

 

처음 사용할 모듈은 glob 입니다. glob 은 어떤 경로 내의 폴더 또는 파일의 목록을 조회할 때 사용하며 윈도우에서는 dir 명령과 비슷합니다. glob 모듈에는 glob() 이라는 함수가 있는데 파일 이름 또는 형태를 넘기면 그에 해당하는 파일이 조회됩니다. 예제 코드에서는 import 를 통해 glob 모듈을 가져다 쓰도록 하고 glob() 함수에는 모든 것을 의미하는 * 와 파이썬 파일 확장자를 의미하는 .py 를 합친 *.py 를 전달함으로써 확장자가 py 인 모든 파일의 목록을 출력해보도록 하겠습니다.

import glob
print(glob.glob("*.py")) # 확장자가 py 인 모든 파일

 

실행을 해보면 현재 작업 공간에 존재하는 .py 로 끝나는 모든 파일이 출력되는 것을 확인할 수 있습니다.

['helloworld.py', 'practice.py', 'theater_module.py']

 

다음으로 사용할 모듈은 os 입니다. os 는 운영체제에서 제공하는 기본 기능 정도로 생각하시면 되는데요. 예를 들어서 폴더를 만들거나 삭제하는 기능을 수행할 수 있습니다. 우선 현재 파이썬 파일이 실행되는 디렉토리 정보를 출력하는 간단한 코드를 작성하겠습니다. os 모듈을 import 하고 getcwd() 함수를 호출하는데 이 때 cwd 는 current working directory 로 현재 작업 디렉토리를 의미합니다.

import os
print(os.getcwd()) # 현재 디렉토리

 

프로그램 실행 결과는 다음과 같습니다.

C:\Users\Nadocoding\Desktop\PythonWorkspace

 

이번에는 폴더를 하나 만들어보겠습니다. folder 변수에 "sample_dir" 이란 값을 지정하고, os 모듈이 제공하는 기능 중 주어진 경로에 해당하는 폴더 또는 파일이 존재하는지 여부를 알려주는 os.path.exists() 함수를 통해서 folder 변수와 동일한 이름의 폴더가 존재하는지를 확인합니다. 확인 결과 폴더가 존재하지 않는 경우에만 makedirs() 함수를 통해서 새로운 폴더를 생성하도록 하겠습니다.

import os

folder = "sample_dir"

if os.path.exists(folder): # 폴더가 존재한다면
    print("이미 존재하는 폴더입니다.")
else: # 폴더가 존재하지 않으면
    os.makedirs(folder) # 폴더 생성
    print(folder, "폴더를 생성하였습니다.")

 

프로그램을 실행시켜보면 Visual Studio Code 좌측 EXPLORER 탭에 sample_dir 이라는 폴더가 새로 생기고 다음 문장이 출력되는 것을 확인할 수 있습니다.

sample_dir 폴더를 생성하였습니다.

 

다시 한 번 프로그램을 실행시키면 이미 sample_dir 폴더가 존재하기 때문에 출력 결과는 달라집니다.

이미 존재하는 폴더입니다.

 

폴더가 존재하는 경우 해다 폴더를 삭제하도록 if 구문을 조금 수정하겠습니다. os 모듈의 rmdir() 함수를 이용하여 folder 변수를 전달하면 되는데 이 때 rm 은 삭제를 의미하는 remove 의 줄임말입니다.

...

if os.path.exists(folder):
    print("이미 존재하는 폴더입니다.")
    os.rmdir(folder) # 폴더 삭제
    print(folder, "폴더를 삭제하였습니다.") # 삭제 문구 출력
else:
    os.makedirs(folder)
    print(folder, "폴더를 생성하였습니다.")

 

한 번 더 프로그램을 실행시켜보면 sample_dir 폴더는 삭제되며 관련 문구가 출력됩니다.

이미 존재하는 폴더입니다.        
sample_dir 폴더를 삭제하였습니다.

 

os 가 제공하는 함수 중에 listdir() 이라는 것이 있는데, glob 모듈의 glob() 함수와 비슷하게 현재 작업 디렉토리 내의 폴더와 파일 목록을 출력해줍니다. 다음과 같이 간단히 코드를 작성하고 실행해보겠습니다.

import os
print(os.listdir())

 

실행 결과는 다음과 같습니다.

['.vscode', 'practice.py', 'profile.pickle', 'score.txt', 'study.txt', 'theater_module.py', 'travel', '__pycache__']

 

 

이번에는 시간 관련 함수를 제공하는 time 모듈을 사용해보겠습니다.

time 모듈을 import 하고 나서 현재 시간 정보를 확인하기 위한 localtime() 함수를 호출하겠습니다.

import time
print(time.localtime())

 

실행 결과는 다음과 같이 뭔가 나오기는 하는데 한 눈에 알아보기는 어렵게 느껴지네요.

time.struct_time(tm_year=2021, tm_mon=3, tm_mday=1, tm_hour=22, tm_min=46, tm_sec=4, tm_wday=0, tm_yday=60, tm_isdst=0)

 

우리나라는 날짜 정보를 보통 "2021년 10월 1일"과 같이 연/월/일 순으로 작성하는데, 국가에 따라 일/월/년 또는 월/일/년 등으로 순서를 다르게 표시하는 경우도 있습니다. time 모듈에는 strftime() 함수를 제공하는데 이를 이용하면 사용자가 원하는 문자열 형태로 시간 정보를 출력할 수 있습니다.

 

이 때 주로 사용되는 코드와 의미는 다음과 같습니다.

코드 의미
%Y 년 (year)
%m 월 (month)
%d 일 (day)
%H 시 (hour)
%M 분 (minute)
%S 초 (second)

 

가령 날짜와 시간 정보를 "2021-10-01 22:00:00" 와 같이 출력하려면 각 자리에 맞게 코드를 입력하고 코드들 사이에 하이픈 (-) 과 콜론 (:) 을 적절히 배치하는 식으로 작성할 수 있습니다. 이 때 코드는 대소문자를 구분하므로 주의해서 사용해야 합니다.

import time
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 연-월-일 시:분:초

 

실행 결과는 다음과 같습니다.

2021-10-01 22:00:00

 

 

time 과 비슷한 모듈로 datetime 도 있습니다. datetime 을 활용하여 오늘 날짜를 출력하려면 다음과 같이 할 수 있습니다.

import datetime
print("오늘 날짜는", datetime.date.today())

 

실행 결과는 다음과 같습니다.

오늘 날짜는 2021-10-01

 

datetime 에는 timedelta() 라는 함수가 있는데 이 함수를 이용하면 두 날짜 사이의 간격을 쉽게 계산할 수 있습니다.

만약 오늘 누군가를 만나기 시작했고 오늘로부터 100 일째 되는 날을 계산한다고 가정하겠습니다. 먼저 오늘 날짜 정보를 저장하기 위해 앞 예제에서 했던 것처럼 datetime.date.today() 함수를 호출하여 today 라는 변수에 저장합니다. 그리고 100 일 뒤를 계산하기 위해 timedelta() 함수를 호출하면서 일별 계산을 하기 위해 days 라는 키워드 인자에 100 을 넣고 반환되는 값을 td 변수에 저장합니다. 마지막으로 print() 함수를 통해 today 와 td 를 더한 값을 출력합니다.

import datetime
today = datetime.date.today() # 오늘 날짜 저장
td = datetime.timedelta(days=100) # 100일 저장
print("우리가 만난지 100일은", today + td) # 오늘부터 100일 후

 

프로그램 실행 시점의 날짜가 2021년 10월 1일인 경우, 100 일 뒤는 2022년 1월 9일임을 확인할 수 있습니다.

우리가 만난지 100일은 2022-01-09

 

 

파이썬으로 개발을 할 때 처음부터 끝까지 모든 기능을 직접 구현하려고 하지 말고, 구글링을 통해 이미 누군가가 잘 만들어 놓은 유용한 라이브러리 (패키지, 모듈) 를 찾아보는 것을 권해드립니다. 여러분이 필요로 하는 대부분의 라이브러리는 이미 존재하고 있으며 지금 이 시간에도 새로운 라이브러리들이 만들어지고 있습니다. 나에게 꼭 필요한 라이브러리를 잘 찾아서 프로젝트에 적용하는 것은 뛰어난 개발자의 덕목이자 개발 생산성을 눈에 띄게 향상시킬 수 있는 훌륭한 전략입니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함