2012-06-11 21 views
9

Así que tengo un script que tiene argumentos de fecha para diferentes funciones y quiero que pase por 01-01-2012 a 06-09-2012 sin incluir los fines de semana. Estoy tratando de encontrar una manera de que pueda utilizar delta de tiempo debido a mi guión da salida a los archivos con la fecha que se utiliza en el nombre del archivo, por ejemplo:Loop a través de fechas, excepto los fines de semana

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

Quiero timedelta (1) para desplazarse por cada fecha de manera que el archivo de salida tendría el formato de total2012-01-01 para el primer día y el ciclo hasta que creó el archivo total2012-06-09. También el argumento de fecha para los artículos tiene el formato de MM-DD-YYYY

pensé que podría hacer esto:

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 

Así que, esencialmente sólo estoy tratando de averiguar cómo puedo bucle a través de tener la función de arranque con 01-01-2012 y termina en 06-10-2012 excluyendo los fines de semana. Estoy teniendo problemas para averiguar cómo excluir fines de semana y cómo conseguir que bucle en el orden correcto

Gracias

+3

Por favor, evite usar fechas en el formato MM-DD-YYYY. Es muy confuso ya que los elementos no están en aumento ni en orden decreciente de magnitud. Además, es fácil mezclarlo con DD-MM-YYYY, que es el segundo formato de fecha más razonable después del estándar ISO YYYY-MM-DD. – Celada

+0

Estoy de acuerdo con @Celada, use el formato ISO si es posible. Si eso no es posible, utilice '/' en lugar de '-' como separador para reducir la confusión. –

Respuesta

12

utilizar el método de datetime.weekday(). Devuelve valores entre cero y seis, relacionados con los días de la semana. El valor del sábado es 5 y el valor del domingo es 6; Por lo tanto, si se salta la operación cuando aparecen estos valores, se 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

da este error querida 'TypeError:' el objeto del módulo 'no se puede llamar' –

+2

@PriyanRockZ probablemente lo importó como 'import datetime'. Intenta usar 'from datetime import datetime' en su lugar. – brandizzi

+0

gracias querido amigo brandizzi.its resuelto :-) –

1

@ respuesta de Brandizzi es más sintácticamente estético, sino como una alternativa se puede utilizar el siguiente

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 
Cuestiones relacionadas