[파이썬] 특정 기간동안 반복 작업을 할때 필요한 함수

근래에 특정 기간동안 일별, 시간별 반복하려는 작업이 필요했다.

예를 들어 2008-06-28일 부터 2008-08-14일까지 FOR문을 돌고 싶을때

파이썬에서 Range() 라는 함수로는 날짜형을 반복처리하기 어려워서

아래와 같은 특정 기간동안의 날짜를 리스트나 튜플로 만들어서

FOR 문을 돌릴 수 있도록 만들어보았다.

필요한 분은 참조 바랍니다.

사용법은 아래와 같이 import 를 하신 후 함수 호출하면 리스트나 튜플이

리턴되니 For문에서 사용가능해집니다.

from DateRange import *

#시간단위로
timeTuple = getTimeTuple('2008-07-01', '2008-07-31', 'H')
for t in timeTuple:
    print t

#일 단위로
dayTuple = getTimeTuple('2008-07-01', '2008-07-31', 'D')
for d in dayTuple:
    print d


-----------------------------------------------------------

다운로드 >> DateRange.py

>>> 코드

#-*- coding:utf-8 -*-

#startTimeStr : '2008-08-10'
#endTimeStr : '2008-09-10'
#Iteration Range : 'D' = day, 'H' = hour

#USAGE 1 : getTimeList('2008-08-01', '2008-08-10', 'H')
#USAGE 2 : getTimeList('2008-08-01', '2008-08-10', 'D')

#RESULT 1 : '2008-08-01 00:00:00', '2008-08-01 01:00:00' ...
#           '2008-08-10 22:00:00', '2008-08-10 23:00:00'
#RESULT 2 : '2008-08-01 00:00:00', '2008-08-02 00:00:00' ...
#           '2008-08-09 00:00:00', '2008-08-10 00:00:00'
from time import *

def getTimeList(startTimeStr, endTimeStr, rangeType):
    #init vars
    startTime = ''
    endTime = ''
    startTimeDigit = 0
    endTimeDigit = 0
    addRange = 0
   
    timeList = []
   
    #set rangeTime
    if rangeType == 'H':
        addRange = 60 * 60
    elif rangeType == 'D':
        addRange = 60 * 60 * 24
    else:
        return []

    #set startTime, endTime
    startTime = strptime(startTimeStr, '%Y-%m-%d')
    startTimeDigit = mktime(startTime)
    endTime = strptime(endTimeStr + " 23:59:59", '%Y-%m-%d %H:%M:%S')
    endTimeDigit = mktime(endTime)

    if startTimeDigit >= endTimeDigit:
        timeList.append(strftime('%Y-%m-%d %H:%M:%S', localtime(startTimeDigit)))
        return timeList

    #set time list
    while True:
        if startTimeDigit > endTimeDigit:
            break;
        timeList.append(strftime('%Y-%m-%d %H:%M:%S', localtime(startTimeDigit)))
        startTimeDigit += addRange
   
    return timeList

def getTimeTuple(startTimeStr, endTimeStr, rangeType):
    #init vars
    startTime = ''
    endTime = ''
    startTimeDigit = 0
    endTimeDigit = 0
    addRange = 0

    timeList = []
    timeTuple = ()
    
    #set rangeTime
    if rangeType == 'H':
        addRange = 60 * 60
    elif rangeType == 'D':
        addRange = 60 * 60 * 24
    else:
        return ()

    #set startTime, endTime
    startTime = strptime(startTimeStr, '%Y-%m-%d')
    startTimeDigit = mktime(startTime)
    endTime = strptime(endTimeStr + " 23:59:59", '%Y-%m-%d %H:%M:%S')
    endTimeDigit = mktime(endTime)

    if startTimeDigit >= endTimeDigit:
        timeList.append(localtime(startTimeDigit))
        return timeTuple

    #set time tuple
    while True:
        if startTimeDigit > endTimeDigit:
            break;
        timeList.append(localtime(startTimeDigit))
        #print localtime(startTimeDigit)
        startTimeDigit += addRange

    timeTuple = tuple(timeList)
    return timeTuple

by 떵꺼리 | 2008/08/14 14:22 | 파이썬 | 트랙백 | 덧글(2)

트랙백 주소 : http://newkain.egloos.com/tb/1948066
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by daybreaker at 2008/08/21 03:58
파이썬 페차쿠차 신청하신 거 보고 와봤습니다. ^^;
음, 간단하고 유용한 코드이긴 한데, 엊그제 generator에 관한 글을 읽어놨더니 이것도 generator 형태로 고치면 어떨까 하는 생각이..;; =3==3=3
for d in dayTuple(...): print d
이런 식으로 바로 쓸 수 있게 말이죠;
Commented by 떵꺼리 at 2008/08/21 11:31
오옷...한번 고쳐봐야겠네요 감사합니다. ;)

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶