2012-06-11 18 views
9

Farklı işlevler için tarih bağımsız değişkenleri olan bir komut dosyası var ve bu hafta sonu dahil olmak üzere 01-01-2012 ile 06-09-2012 arasında geçiş yapmasını istiyorum. Böylece her tarih boyuncaHafta sonları dışındaki tarihler arasında döngü

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') 

ben timedelta (1) döngüsü istiyorum: Im benim komut örneğin dosyanın adına kullanılan tarihi ile dosya üretir çünkü zaman delta kullanabileceğiniz bir yol bulmaya çalışıyorum çıktı dosyası, ilk gün için total2012-01-01 biçiminde olur ve total2012-06-09 dosyasını oluşturuncaya kadar çevrilir. Ayrıca öğeler için tarih argüman Ben bu yapabileceğini düşündü MM-DD-YYYY

biçimi vardır:

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 

Yani esasen sadece anlamaya çalışıyorum nasıl olabilir fonksiyonu ile başlar sahip yoluyla ben döngü 01-01-2012 ve hafta sonları hariç 06-10-2012 ile biten. Ben nasıl doğru sırayla döngü almak için

Teşekkür

+3

tarihleri ​​kullanmaktan kaçının kullanabilirsiniz: bu değerler göründüğünde işlemini atlamak eğer öyleyse, sen weekdends atlamak MM-GG-YYYY biçimi. Çok kafa karıştırıcıdır, çünkü elementler ne artan ne de ne kadar büyüklük derecesinde azalmaktadır. Ayrıca, ISO-standart YYYY-AA-DD'den sonraki en uygun tarih formatı olan DD-MM-YYYY ile karıştırılması kolaydır. – Celada

+0

@Celada ile katılıyorum, mümkünse ISO formatını kullanın. Bu mümkün değilse, karışıklığı azaltmak için lütfen ayırıcı olarak '/' yerine '/' kullanın. –

cevap

12

datetime.weekday() yöntemi kullanın hafta sonları hariç nasıl sergiyi sorun yaşamaya ve var. Hafta içi ile ilgili olarak sıfır ile altı arasında değerler döndürür. Cumartesi değeri 5 ve Pazar değeri 6'dır; brandizzi cevabı daha sözdizimsel estetik @

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 
+0

bu hatayı veriyor 'TypeError:' modülü 'nesnesi callable değil' –

+2

@PriyanRockZ, muhtemelen 'import datetime' olarak ithal ettiniz. Bunun yerine datetime import datetime 'i kullanmaya çalışın. – brandizzi

+0

teşekkürler sevgili arkadaşım brandizzi.its çözüldü :-) –

1

ama alternatif olarak aşağıdaki

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