11

そのため、さまざまな関数の日付引数を持つスクリプトがあり、週末を含めないようにループ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')

total2012-01-01出力ファイルが最初の日の形式になり、ファイルが作成されるまで循環するように、 timedelta(1) が各日付を循環するようにします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週末を除外する方法と、適切な順序でループさせる方法を理解するのに苦労しています

ありがとう

4

3 に答える 3

18

メソッドを使用しdatetime.weekday()ます。平日に関連する 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
于 2012-06-11T17:35:09.577 に答える
1

@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
于 2016-09-28T01:40:18.443 に答える