2012-06-11 17 views
9

Quindi ho uno script con argomenti di data per diverse funzioni e voglio che passi attraverso 01-01-2012 a 06-09-2012, esclusi i fine settimana. Nel tentativo di capire un modo che posso usare il tempo delta perché il mio script stampa i file con la data utilizzato nel nome del file, ad esempio:Passa attraverso le date ad eccezione dei fine settimana

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

voglio timedelta (1) per scorrere ogni data in modo che il file di output dovrebbe avere il formato di total2012-01-01 per il primo giorno e scorrere fino a quando non ha creato il file total2012-06-09. Anche l'argomento della data per gli elementi ha il formato di MM-DD-YYYY

ho pensato che avrei potuto fare questo:

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 

Quindi, in sostanza Sto solo cercando di capire come posso scorrere dover avviare la funzione con 01-01-2012 e termina con 06-10-2012 esclusi i fine settimana. Sto avendo difficoltà a capire come escludere fine settimana e come farlo al ciclo nel giusto ordine

Grazie

+3

Si prega di evitare di utilizzare date il formato MM-GG-AAAA. È molto confuso poiché gli elementi non sono né in aumento né in ordine decrescente di grandezza. Inoltre, è facile combinarlo con DD-MM-YYYY, che è il secondo formato di data più ragionevole dopo lo standard ISO YYYY-MM-DD. – Celada

+0

Sono d'accordo con @Cada, usa il formato ISO se possibile. Se ciò non è possibile, usa '/' invece di '-' come separatore per ridurre la confusione. –

risposta

12

utilizzare il metodo datetime.weekday(). Restituisce valori compresi tra zero e sei, relativi ai giorni della settimana. Il valore del sabato è 5 e il valore della domenica è 6; quindi, se si salta l'operazione quando appaiono questi valori, si salta 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

dà questo errore caro 'TypeError:' module 'object is not callable' –

+2

@PriyanRockZ probabilmente lo hai importato come 'import datetime'. Prova invece a utilizzare 'da data/ora importazione data/ora '. – brandizzi

+0

grazie caro brandizzi.its risolto :-) –

1

@ risposta di Brandizzi è più sintatticamente estetico, ma in alternativa è possibile utilizzare il seguente

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 
Problemi correlati