2008년 08월 14일
[파이썬] 특정 기간동안 반복 작업을 할때 필요한 함수
근래에 특정 기간동안 일별, 시간별 반복하려는 작업이 필요했다.
파이썬에서 Range() 라는 함수로는 날짜형을 반복처리하기 어려워서
아래와 같은 특정 기간동안의 날짜를 리스트나 튜플로 만들어서
FOR 문을 돌릴 수 있도록 만들어보았다.
필요한 분은 참조 바랍니다.
사용법은 아래와 같이 import 를 하신 후 함수 호출하면 리스트나 튜플이
리턴되니 For문에서 사용가능해집니다.
-----------------------------------------------------------
다운로드 >> DateRange.py
>>> 코드
예를 들어 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)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
음, 간단하고 유용한 코드이긴 한데, 엊그제 generator에 관한 글을 읽어놨더니 이것도 generator 형태로 고치면 어떨까 하는 생각이..;; =3==3=3
for d in dayTuple(...): print d
이런 식으로 바로 쓸 수 있게 말이죠;