2012-06-11 8 views
9

इसलिए मेरे पास एक ऐसी स्क्रिप्ट है जिसमें विभिन्न कार्यों के लिए दिनांक तर्क हैं और मैं इसे 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 के साथ समाप्त होता है। मैं मुसीबत पता लगाना सप्ताहांत बहिष्कृत करने का तरीका आ रही हैं और कैसे उचित क्रम में पाश करने के लिए इसे पाने के लिए

धन्यवाद

+3

कृपया में दिनांक का उपयोग कर से बचने कर सकते प्रारूप एमएम-डीडी-वाई वाई वाई। यह बहुत भ्रमित है क्योंकि तत्व न तो बढ़ रहे हैं और न ही परिमाण के घटते क्रम में हैं। इसके अलावा, इसे डीडी-एमएम-वाई वाई वाई वाई के साथ मिश्रण करना आसान है, जो आईएसओ-मानक वाई वाई वाई वाई-एमएम-डीडी के बाद दूसरा सबसे उचित दिनांक प्रारूप है। – Celada

+0

मैं @ सेलाडा से सहमत हूं, यदि संभव हो तो आईएसओ प्रारूप का उपयोग करें। यदि यह संभव नहीं है, तो भ्रम को कम करने के लिए एक विभाजक के रूप में '-' के बजाय'/'का उपयोग करें। –

उत्तर

12

datetime.weekday() विधि का उपयोग करें। यह सप्ताह के दिनों से संबंधित शून्य और छः के बीच मूल्य देता है। शनिवार मूल्य 5 है और रविवार का मूल्य 6 है; इसलिए, यदि आप आपरेशन को छोड़ जब इन मूल्यों को दिखाई देते हैं, तो आप 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 
+0

यह त्रुटि देता है प्रिय 'TypeError:' मॉड्यूल 'ऑब्जेक्ट कॉल करने योग्य नहीं है' –

+2

@PriyanRockZ आपने शायद इसे 'आयात डेटाटाइम' के रूप में आयात किया है। इसके बजाए 'डेटाटाइम आयात डेटाटाइम' से उपयोग करने का प्रयास करें। – brandizzi

+0

धन्यवाद प्रिय दोस्त brandizzi.its हल :-) –

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 
संबंधित मुद्दे