Python 循环浏览日期,周末除外

Python 循环浏览日期,周末除外,python,datetime,loops,Python,Datetime,Loops,因此,我有一个脚本,其中包含不同函数的日期参数,我希望它能够循环通过01-01-2012到06-09-2012,不包括周末。我试图找出一种使用时间增量的方法,因为我的脚本输出的文件的名称中使用了日期,例如: items = (functions.getItems(item,date) print items test = sum(abs(l[-1]) for l in items) total = open('total' +str(datetime.today- dat

因此,我有一个脚本,其中包含不同函数的日期参数,我希望它能够循环通过
01-01-2012
06-09-2012
,不包括周末。我试图找出一种使用时间增量的方法,因为我的脚本输出的文件的名称中使用了日期,例如:

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')
我希望timedelta(1)循环遍历每个日期,以便输出文件在第一天的格式为
total2012-01-01
,并循环遍历,直到创建文件
total2012-06-09
。项目的日期参数的格式为
MM-DD-YYYY

我想我可以做到这一点:

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
因此,本质上,我只是想弄清楚如何循环函数以
01-01-2012
开始,以
06-10-2012
结束,周末除外。我很难弄清楚如何排除周末,以及如何让它以正确的顺序循环

谢谢

使用该方法。它返回的值介于0和6之间,与工作日相关。周六值为5,周日值为6;因此,如果在出现这些值时跳过该操作,则跳过工作日:

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
start=datetime(2012,1,1)
结束=日期时间(2012年10月6日)
增量=时间增量(天数=1)
d=开始
差异=0
周末=设置([5,6])

虽然d@brandizzi的答案在句法上更加美观,但作为替代,您可以使用以下选项

start = datetime(2012, 1, 1)
end = datetime(2012, 10, 6)
delta = timedelta(days=1)
d = start
diff = 0
SATURDAY = 5
while d <= end:
    if d.weekday() < SATURDAY:
        diff += 1
        d += delta
start=datetime(2012,1,1)
结束=日期时间(2012年10月6日)
增量=时间增量(天数=1)
d=开始
差异=0
星期六=5

而对于
工作日频率
,使用
freq='B'
有更简单的方法

import pandas as pd
dt = pd.date_range(start=datetime.date.today(), periods=10, freq='B')
dt
这给了你:

DatetimeIndex(['2018-08-13', '2018-08-14', '2018-08-15', '2018-08-16',
               '2018-08-17', '2018-08-20', '2018-08-21', '2018-08-22',
               '2018-08-23', '2018-08-24'],
              dtype='datetime64[ns]', freq='B')
您还可以通过以下方式检查日期:

dt.weekday_name

Index(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Monday',
       'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
      dtype='object')

请避免使用MM-DD-YYYY格式的日期。这是非常令人困惑的,因为元素既不是递增的,也不是递减的。此外,很容易将其与DD-MM-YYYY混淆,DD-MM-YYYY是继ISO标准YYYY-MM-DD之后第二合理的日期格式。我同意@Celada,如果可能,请使用ISO格式。如果不可能,请使用
/
而不是
-
作为分隔符,以减少混淆。这会导致此错误亲爱的'TypeError:'module'对象不可调用'@PriyanRockZ您可能将其作为
导入日期时间
导入。请尝试改用“从日期时间导入日期时间”
。@mrbTT文档中说。当然,我们总是可以测试它,但我想知道为什么他们会改变这一点,特别是在倒计时:)