tabulate mac instalar python datetime calendar

instalar - install tabulate python mac



¿Cómo puedo seleccionar todos los domingos de un año usando Python? (6)

Aquí hay una función de generador completa que se basa en la solución de @sth. Incluye la solución crucial que se mencionó en los comentarios de su solución.

Puede especificar el día de la semana (usando la indexación de Python con 0 = lunes a 6 = domingo), la fecha de inicio y el número de semanas para enumerar.

def get_all_dates_of_day_of_week_in_year(day_of_week, start_year, start_month, start_day, max_weeks=None): '''''' Generator function to enumerate all calendar dates for a specific day of the week during one year. For example, all Wednesdays in 2018 are: 1/3/2018, 1/10/2018, 1/17/2018, 1/24/2018, 1/31/2018, 2/7/2018, etc. Parameters: ---------- day_of_week : int The day_of_week should be one of these values: 0=Monday, 1=Tuesday, 2=Wednesday, 3=Thursday, 4=Friday, 5=Saturday, 6=Sunday. start_year : int start_month : int start_day : int The starting date from which to list out all the dates max_weeks : int or None If None, then list out all dates for the rest of the year. Otherwise, end the list after max_weeks number of weeks. '''''' if day_of_week < 0 or day_of_week > 6: raise ValueError(''day_of_week should be in [0, 6]'') date_iter = date(start_year, start_month, start_day) # First desired day_of_week date_iter += timedelta(days=(day_of_week - date_iter.weekday() + 7) % 7) week = 1 while date_iter.year == start_year: yield date_iter date_iter += timedelta(days=7) if max_weeks is not None: week += 1 if week > max_weeks: break

Ejemplo de uso para obtener todos los miércoles a partir del 1 de enero de 2018, durante 10 semanas.

import calendar day_of_week = 2 max_weeks = 10 for d in get_all_dates_of_day_of_week_in_year (day_of_week, 2018, 1, 1, max_weeks): print "%s, %d/%d/%d" % (calendar.day_name[d.weekday()], d.year, d.month, d.day)

El código anterior produce:

Wednesday, 2018/1/3 Wednesday, 2018/1/10 Wednesday, 2018/1/17 Wednesday, 2018/1/24 Wednesday, 2018/1/31 Wednesday, 2018/2/7 Wednesday, 2018/2/14 Wednesday, 2018/2/21 Wednesday, 2018/2/28 Wednesday, 2018/3/7

Utilizando Python ...

¿Cómo puedo seleccionar todos los domingos (o cualquier otro día) en un año?

[ ''01/03/2010'',''01/10/2010'',''01/17/2010'',''01/24/2010'', ...]

Estas fechas representan los domingos de 2010. Esto también podría aplicarse a cualquier día de la semana, supongo.


Pandas tiene una gran funcionalidad para este propósito con su función date_range .

El resultado es un DatetimeIndex y DatetimeIndex pandas, pero se puede convertir a una lista fácilmente.

import pandas as pd def allsundays(year): return pd.date_range(start=str(year), end=str(year+1), freq=''W-SUN'').strftime(''%m/%d/%Y'').tolist() allsundays(2017)[:5] # First 5 Sundays of 2017 # [''01/01/2017'', ''01/08/2017'', ''01/15/2017'', ''01/22/2017'', ''01/29/2017'']


Puede usar la date del módulo datetime para encontrar el primer domingo de un año y luego seguir agregando siete días, generando nuevos domingos:

from datetime import date, timedelta def allsundays(year): d = date(year, 1, 1) # January 1st d += timedelta(days = 6 - d.weekday()) # First Sunday while d.year == year: yield d d += timedelta(days = 7) for d in allsundays(2010): print d


Puedes iterar sobre un calendario para ese año. Lo siguiente debe devolver todos los martes y jueves para un año determinado.

# Returns all Tuesdays and Thursdays of a given year from datetime import date import calendar year = 2016 c = calendar.TextCalendar(calendar.SUNDAY) for m in range(1,13): for i in c.itermonthdays(year,m): if i != 0: #calendar constructs months with leading zeros (days belongng to the previous month) day = date(year,m,i) if day.weekday() == 1 or day.weekday() == 3: #if its Tuesday or Thursday print "%s-%s-%s" % (year,m,i)


Usando el módulo dateutil , podría generar la lista de esta manera:

#!/usr/bin/env python import dateutil.relativedelta as relativedelta import dateutil.rrule as rrule import datetime year=2010 before=datetime.datetime(year,1,1) after=datetime.datetime(year,12,31) rr = rrule.rrule(rrule.WEEKLY,byweekday=relativedelta.SU,dtstart=before) print rr.between(before,after,inc=True)

Aunque encontrar todos los domingos no es demasiado difícil de hacer sin dateutil, el módulo es útil, especialmente si tiene cálculos de fechas más complicados o variados.

Si está utilizando Debian / Ubuntu, el paquete python-dateutil proporciona dateutil.


utilizando la lista de comprensión:

from datetime import date, timedelta dstart = date(2018,1,1) dend = date(2018,12,31) # this will return all sundays between start-end dates. days = [dstart + timedelta(days=x) for x in range((dend-dstart).days + 1) if (dstart + timedelta(days=x)).weekday() == 6]