Rtrader Rtrader - 2 months ago 20
Python Question

Loop through dates except for weekends

So I have a script that has date arguments for different functions and I want it to loop through

01-01-2012
to
06-09-2012
not including weekends. Im trying to figure out a way I can use time delta because my script outputs files with the date used in the name of the file for example:

items = (functions.getItems(item,date)
print items
test = sum(abs(l[-1]) for l in items)
total = open('total' +str(datetime.today- datetime.timedelta(1)),'a')


I want timedelta(1) to cycle through each date so that the output file would have the format of
total2012-01-01
for the first day and cycle through until it created the file
total2012-06-09
. Also the date argument for items has the format of
MM-DD-YYYY


I thought that I could do this:

sd = 01-01-2012
ed = 06-09-2012
delta = datetime.timedelta(days=1)
diff = 0
while sd != ed
# do functions
# (have output files (datetime.today - datetime.delta(diff))
diff +=1
sd+=delta


So essentially I'm just trying to figure out how can I loop through having the function start with
01-01-2012
and ending with
06-10-2012
excluding weekends. I'm having trouble figuring out how to exclude weekends and how to get it to loop in the proper order

Thanks

Answer

Use the datetime.weekday() method. It returns values between zero and six, related to the weekdays. Saturday value is 5 and Sunday value is 6; so, if you skip the operation when these values appear, you skip weekdends:

start = datetime(2012, 1, 1)
end = datetime(2012, 10, 6)
delta = timedelta(days=1)
d = start
diff = 0
weekend = set([5, 6])
while d <= end:
    if d.weekday() not in weekend:
        diff += 1
    d += delta