프로그래밍/python3.x-library

파이썬 달력 모듈 calendar 사용법

콘파냐 2017. 4. 2. 13:08

파이썬에서 기본적으로 제공되는 달력 모듈인 calendar에 대한 정리!

calendar 모듈은 표준 모듈로 달력과 관련된 유용한 함수, 클래스들을 포함하고 있다. 


달력 출력하기


이번달(오늘이 포함된) 달력을 그려보려면 어떻게 할까? 함수를 이용하는 방법을 먼저 알아보자.

month(year, month) 함수로 해당 년(year), 월(month)에 해당하는 달력이 문자열로 출력된다. print로 이 문자열을 출력하면 달력 형식에 맞게 출력된다. 애초에 다음과 같이 prmonth함수를 사용해도 된다.


그런데 달력을 제대로 사용하려면 calendar 모듈이 제공하는 클래스를 사용해야 한다. 위와 같은 작업을 클래스로 해보겠다.


달력을 현지화(요일이름을 사용자 언어에 맞게) 시키고 싶다면 다음과 같이 하면 된다.


앞에 사용한 클래스이름에서 Text를 HTML로 바꾸면 HTML 테이블 형식으로 달력을 반환해 준다.


다음은 위에서 반환된 값들을 HTML코드 안에 삽입한 모습이다.

4월 2017
     12
3456789
10111213141516
17181920212223
24252627282930

사실 위 방법은 단순히 달력만 출력한다. 달력을 좀 더 응용하려면 형식이 있는 데이터 구조가 필요하다. 그 전에 calendar 모듈에서 제공하는 클래스들의 관계에 대해서 잠시 살펴보자.

위와 같은 상속구조로 다음에 설명하는 메소드는 모두 Calendar 클래스로부터 상속된 것들이다.


데이터 구조

monthdatescalendar 메소드


우선 datetime 모듈의 date 클래스 객체로 특정 일을 표현할 수 있다는 것을 알아두자. 

monthdatescalendar 메소드를 사용하면 해당 달의 달력을 다음과 같은 데이터 구조로 반환해 준다.

리스트 형태로 반환되는 리스트 안에 또 5개(유동적)의 리스트가 있는데 각 리스트들은 한 주(weekday)를 의미한다. (달력은 42칸 35칸이면 어떤 달이든 표시할 수 있다.) 그리고 각 리스트는 7개의 사각형을 가졌는데 각각의 사각형은 date객체를 뜻하고 해당 위치에 맞는 일에 대한 정보를 가지고 있다. 위 그림에서 2017년 4월 2일의 정보를 가진 date객체의 위치와 실제 달력에서의 해당 위치의 날짜를 비교해 보자.

이런 식으로 35개의 date객체가 달력 한달을 표시할 수 있다.

35개의 date객체는 모두 의미있는 값을 지닌다. 예를들어 4월1을 의미하는 칸의 왼쪽칸들은 4월 달력 기준으로는 비어있어야 한다. 그런데 실제로는 다음과 같다.


이렇게 35개의 칸은 모두 의미있는 date객체를 지니는데 이렇게 빈 칸에 전 달과 이번 달 그리고 다음달의 이어진 날들이 표시된다.


좀 다른 데이터 구조를 반환하는 메소드를 알아보자.

monthdayscalendar, monthdays2calendar


이 두 메소드는 좀 앞에서 설명한 monthdatescalendar 메소드가 반환하는 형태와 구조는 같다. 단 내부에 요소(사각형)만 다르다.

일, 또는 (일, 요일) 형식의 데이터요소를 갖는다. monthdatescalendar와 또다른 차이점은 전 달, 또는 다음 달 달력이 연결되지 않는다. 단순히 일자가 0으로 표현되었다.

이 밖에도 제너레이터를 반환해 주는 메소드도 있다. 기능은 앞에 세 가지 메소드와 동일하다. (itermonthdates, itermonthday, itermonthday2)

이외에도 다른 함수들, 메소드들이 있는데 지금까지 소개한 정도면 기본적인 사용은 충분할 듯 싶다.

반응형