Python 从datetime对象排序工作日

Python 从datetime对象排序工作日,python,django,Python,Django,我想从datetime对象列表中获取每个类似星期的工作日 示例:用于列表 [2020-08-17 07:00:00,2020-08-28 05:00:00,2020-08-17 09:00:00,2020-08-18 09:00:00,2020-08-24 02:00:00,2020-08-27 02:00:00] 结果应该是: list_1 = ['Mon', 'Tue'] list_2 = ['Mon', 'Thu', 'Fri'] 这将把日期转换为一周中的几天(0-6): 利用字典有效跟

我想从datetime对象列表中获取每个类似星期的工作日

示例:用于列表
[2020-08-17 07:00:00,2020-08-28 05:00:00,2020-08-17 09:00:00,2020-08-18 09:00:00,2020-08-24 02:00:00,2020-08-27 02:00:00]

结果应该是:

list_1 = ['Mon', 'Tue']
list_2 = ['Mon', 'Thu', 'Fri']

这将把日期转换为一周中的几天(0-6):


利用字典有效跟踪一周中的日期:

from dateutil import parser

# The given dates as strings
sabich = [ '2020-08-17 07:00:00' , '2020-08-28 05:00:00' , '2020-08-17 09:00:00' , '2020-08-18 09:00:00' , '2020-08-24 02:00:00' , '2020-08-27 02:00:00' ]

weeks_dates = dict()

# Loop on the given dates as strings
for ds in sabich:
    # Parse date from string o datetime object
    dt = parser.parse(ds)
    # Find date's week in year
    week_in_year = dt.isocalendar()[1]
    # Find date's day in week name
    date_day_name = dt.strftime("%A")
    # If week doesn't exists as key (no days of that date existed)
    if week_in_year not in weeks_dates.keys():
        # Create list to add the date names to that list
        weeks_dates[week_in_year] = []
    # Append the date week day name
    weeks_dates[week_in_year].append(date_day_name)

# Printing the days names for each week
for week_in_year in weeks_dates.keys():
    print(f'Week number {week_in_year}, days that appeared {weeks_dates[week_in_year]}')
输出:

Week number 34, days that appeared ['Monday', 'Monday', 'Tuesday']
Week number 35, days that appeared ['Friday', 'Monday', 'Thursday']
Week of 2020-08-17: ['Mon', 'Tue']
Week of 2020-08-24: ['Mon', 'Thu', 'Fri']
从datetime导入datetime,timedelta
从集合导入defaultdict
日期=[“2020-08-17 07:00:00”,“2020-08-28 05:00:00”,“2020-08-17 09:00:00”,“2020-08-18 09:00:00”,“2020-08-24 02:00:00”,“2020-08-27 02:00:00”]
工作日=[‘周一’、‘周二’、‘周三’、‘周四’、‘周五’、‘周六’、‘太阳’]
#创建用于存储每周列表的词典
#每个条目的默认值为空列表
周=默认DICT(列表)
对于日期中的日期字符串:
#从列表元素创建datetime对象
date=datetime.strTime(日期字符串,%Y-%m-%d%H:%m:%S)
#获取日期的工作日
weekday=工作日[日期.工作日()]
#获取上周一的日期(对于索引周)
weekMonday=(date-timedelta(days=date.weekday()).strftime(“%Y-%m-%d”)
#将工作日添加到dict中相应的周条目中
周[weekMonday]。附加(weekday)
#排序并删除重复项
weeks[weekMonday]=列表(已排序(设置(weeks[weekMonday]),key=lambda x:weekdays.index(x)))
#打印结果
对于x(以周为单位):
打印(“周数“+x+”:”,周数[x])
输出:

Week number 34, days that appeared ['Monday', 'Monday', 'Tuesday']
Week number 35, days that appeared ['Friday', 'Monday', 'Thursday']
Week of 2020-08-17: ['Mon', 'Tue']
Week of 2020-08-24: ['Mon', 'Thu', 'Fri']
您可以通过提供该周星期一的日期来访问每个列表,例如:

print(星期[“2020-08-17”])#[“周一”、“周二”]