본 포스팅은 책 「두근두근 파이썬」을 참고하여 공부한 내용의 정리본입니다.
이전 게시글
[Python] 함수와 입출력 (fin)
2021/01/17 - [Programming/#Python] - [Python] 함수와 입출력 (fin) (실습 결과 포함)
0. 들어가며
드디어.. 계절학기 종강 🙌 과제가 남아있지만 이번 수업도 무사히 넘긴 것 같아 다행이다. 1달 만에 4달치 분량을 소화하느라 조금 벅찼지만 여기에 정리하면서 되새겨 봐야지. 오늘은 함수에 대해 다룬 지난 포스팅에 이어 파이썬에서 지원하는 여러가지 모듈을 정리해보려 한다. 과제도 이 주제로 하게 될 것 같아서 겸사겸사.
1. 모듈의 정의와 import 문법
모듈(module)은 함수, 변수, 클래스를 포함하는 개념으로, 파이썬 내부에 스크립트 파일 형태로 구현되어 있다. 이러한 모듈은 파이썬을 사용하는 개발자가 직접 원하는 기능을 담아 개발할 수 있다. 이는 'import'문으로 모듈을 불러와 객체 뒤에 점(.)으로 연결하여 사용한다.
>>> import 모듈1 [, 모듈2, ...] # 여러개 모듈 동시에 불러오기
#or
>>> import [모듈이름] as [모듈의 별칭] # 간단한 별칭을 지정해줄 수 있음
from ~ import ~ 구문
간혹 모듈이름, 클래스 이름의 full name이 너무 길어 이를 줄이고 싶을 때가 있다. 이때 for ~ import ~문을 사용하여 호출을 간단히 할 수 있다. 다음은 datetime 모듈로부터 datetime 클래스를 불러와 모듈 호출을 생략한 경우이다.
>>> from datetime import datetime
>>> start_time = datetime.now()
>>> start_time.replace(month = 12, day = 25)
datetime.datetime(2021, 12, 25, 1, 42, 31, 392087)
파이썬 표준 라이브러리 (python standard library)
파이썬 내부에 여러 가지 모듈 중 파이썬 설치와 함께 제공되는 모듈을 말한다. 예를 들어, 문자열 처리 모듈, 데이터베이스 접근을 위한 모듈 등이 있다.
2. 날짜와 시간 모듈 datetime
여러가지 기능의 모듈 중 날짜와 시간에 관한 기능을 제공하는 datetime 모듈이 있다. 이 모듈의 하위 메소드이자 현재 시간을 반환하는 now() 메소드를 다음과 같이 사용해보자.
>>> import datetime as dt # 모듈 불러오기
>>> dt.datetime.now()
dt.datetime(2021, 1, 23, 0, 41, 35, 639422)
이번에는 모듈 내 date 클래스의 today() 메소드로 현재 날짜를 출력해보자. (여기서 클래스와 메소드는 모듈의 하위 개념으로 추후에 자세히 다루도록 한다.)
# 현재 날짜를 today 객체에 저장
>>> today = dt.date.today()
>>> print(today)
2021-01-23
# 클래스 내부 속성
>>> today.year
2021
>>> today.month
1
>>> today.day
23
dir() 함수
지금까지 살펴본 것과 같이 모듈 내부에는 여러가지 클래스(속석)들이 존재한다. 이들 속성의 목록을 보고 싶을 때 쓰는 함수가 dir() 함수이다. 아래와 같이 datatime 모듈에는 여러 클래스가 존재하며, 대표적으로 MAXYEAR는 표현 가능한 범위의 최대 연도(9999), MINYEAR는 최소 연도(1) 값을 가진다.
>>> print(dir(datetime))
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time',
'timedelta', 'timezone', 'tzinfo']
replace() 메소드
이 메소드는 날짜, 시간을 변경하고자 할 때 다음과 같이 사용한다.
>>> start_time = dt.datetime.now()
>>> start_time.replace(month = 12, day = 25)
datetime.datetime(2021, 12, 25, 1, 42, 31, 392087) # 월과 일이 바뀐 모습
LAB 7-1: 오늘의 날짜와 현재시간 출력하기
오전/오후를 구분해주는 조건문만 추가하였다.
# 1
>>> today = dt.datetime.now()
>>> year = today.year
>>> month = today.month
>>> day = today.day
>>> hour = today.hour
>>> minute = today.minute
>>> second = today.second
>>> if today.hour >= 12:
ampm = '오후'
else:
ampm = '오전'
>>> print('오늘의 날짜 : {}년 {}월 {}일'.format(year, month, day))
>>> print('현재시간 : {} {}시 {}분 {}초'.format(ampm, hour, minute, second))
오늘의 날짜 : 2021년 1월 23일
현재시간 : 오전 2시 5분 17초
2-1. 남은 시간 구하기
LAB 7-2 : 남은 날짜 계산하기
timedelta() 클래스 없이 남은 날짜를 계산해보는 예제이다. 시간을 구해주는 메소드가 없으므로 3600으로 나눠주었다. (tmi: 2025년 12월 25일은 내 28살 생일 🎂🤷♀️)
# 1
# today, year, month, day, hour, minute, second 이전과 동일
>>> xMas = dt.datetime(2025, 12, 25)
>>> tgap = xMas - today
>>> gap_days = tgap.days
>>> gap_hours = tgap.seconds//3600
>>> print('오늘은 {}년 {}월 {}일입니다'.format(year, month, day))
>>> print('2025년 크리스마스까지는 {}일 {}시간 남았습니다.'.format(gap_days, gap_hours))
오늘은 2021년 1월 23일입니다
2025년 크리스마스까지는 1796일 21시간 남았습니다.
2-2. 100일 뒤 날짜 구하기
이번에는 시간 사이의 +, -연산이 가능한 timedelta 클래스에 대해 알아보자. 바로 위 예제에서도 tgap 객체에 시간끼리의 연산 결과를 할당해주었다. 이번엔 특정 시점을 기준으로 100일 전/후의 날짜를 구해보자.
>>> import datetime as dt
>>> print('오늘 =', dt.datetime.now()) # 현재시간
>>> hundred = dt.timedelta(days = 100) # 100일을 +해줄 때 사용
>>> plus100day = dt.datetime.now() + hundred
>>> print('100일 후 =', plust100day)
오늘 = 2021-01-23 02:29:50.875915
100일 후 = 2021-05-03 02:29:50.875915
이와 같이 날짜, 시간 간 연산을 수행하는 timedelta 클래스는 다음과 같은 인자를 갖는다. 위의 예제에서는 일 단위로 + 연산해주었고, 이외에도 주/시간/분 등 다양한 단위로 연산할 수 있다.
3. time 모듈
다음으로 다룰 모듈은 time 모듈이다. 이 모듈 역시 시간에 관한 정보를 제공하는데, 그 표준을 유닉스 시스템의 시작시간 (1970, 1, 1, 0:0:0)으로 정해두었다는 특징이 있다. 이러한 표준 시간 체계를 에폭(epoch) 시간 or 유닉스 시간 이라고도한다. 그렇다면 유닉스 시간으로부터 지금까지 시간이 얼마나 흘렀을까?
>>> import time # time 모듈 불러오기
>>> seconds = time.time()
>>> print('에폭 이후의 시간 =', seconds)
에폭 이후의 시간 = 1611336985.455697
(16억 초...? 👀)
stftime()
방금 전엔 에폭 이후의 시간을 '초'단위로 반환하였다. 이 반환값을 우리가 원하는 구조(struct)로 변환하는 함수가 strftime()이다.
>>> unix_timestamp = time.time()
>>> local_time = time.localtime(unix_timestamp)
>>> print(time.strftime('%Y-%m-%d %H:%M:%S', local_time))
2021-01-23 02:39:54
위 예제에서는 [연도-월-일 시간:분:초] 포맷으로 지정해주었는데, 이 포맷은 다음 주소에서 확인할 수 있다.
sleep()
오늘 다룰 마지막 함수! 이 함수는 일정 시간동안 현재 실행 중인 쓰레드(thread)를 일시 중지하는 기능의 함수이다. 다음 코드에서 마지막 문장은 첫 번째 문장 출력 후 4.5초 간의 간격을 갖고 출력된다.
>>> print('바로 출력됩니다.')
>>> time.sleep(4.5)
>>> print('4.5초 기다리고 출력됩니다.')
바로 출력됩니다.
4.5초 기다리고 출력됩니다.
오늘은 간단하게 python 내의 시간 관련 몇 가지 모듈들을 알아봤다. 다음 포스팅에서는 더 다양한 종류의 모듈을 활용해보겠다.
다음 게시글
[Python] 모듈과 활용 (2)
I'm a Senior Student in Data Science !
데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)
'Programming > #Python' 카테고리의 다른 글
[자료구조] 힙(Heap) 연산 - 삽입/추출 구현하기 (Python) (0) | 2021.07.02 |
---|---|
[자료구조] 트리 순회 - 재귀구조 DFS로 preoder, inorder, postorder 구현 (Python) (0) | 2021.06.30 |
[Python] 함수와 입출력 (fin) (실습 결과 포함) (0) | 2021.01.17 |
[Python] 함수와 입출력 (2) (실습 결과 포함) (0) | 2021.01.14 |
[Python] 함수와 입출력 (1) (실습 결과 포함) (0) | 2021.01.13 |