Python中的日期排序

Python中的日期排序,python,Python,我正在以以下格式将某些计划任务的日期和时间段保存在txt中: Monday,10:50-11:32 Friday,18:33-18:45 Sunday,17:10-17:31 Sunday,14:10-15:11 Friday,21:10-23:11 我正在打开txt文件,并获得列表中的内容。 如何对列表进行排序,以使日期和时间段按顺序排列? 像这样: Monday,10:50-11:32 Friday,18:33-18:45 Friday,21:10-23:11 Sunday,

我正在以以下格式将某些计划任务的日期和时间段保存在txt中:

Monday,10:50-11:32

Friday,18:33-18:45

Sunday,17:10-17:31

Sunday,14:10-15:11

Friday,21:10-23:11
我正在打开txt文件,并获得列表中的内容。 如何对列表进行排序,以使日期和时间段按顺序排列? 像这样:

Monday,10:50-11:32

Friday,18:33-18:45

Friday,21:10-23:11

Sunday,14:10-15:11

Sunday,17:10-17:31

好吧,假设你只有dayofweek和时间戳。另一种方法是计算每个项目的分钟数(周一00:00=0分钟,周日23:59=最大分钟),并使用该函数进行排序

下面的示例使用第一个时间戳值进行排序。一位同事SO:er的评论指出,这不包括第二个时间戳(结束时间)。为了包含这一点,我们可以通过反转每天的分钟数来添加一个十进制值

((int(h2)* 60 + int(m2))/24*60) # minutes divided by maximum minutes per day gives a decimal number
但是,这里的关键是以下代码:

weekday[day]*24*60 + int(h1)*60 + int(m1) # gets the total minutes passed, we sort with this!
当然还有带有连接的排序函数(双折线)。当您将一个键传递给sorted()并且该键是一个函数时,排序将基于该函数的返回值(即分钟数)

足够的文本。。。让我们跳到一个完整的示例更新版本

import io

file= """Monday,10:50-11:32

Friday,18:33-18:45

Sunday,17:10-17:31

Sunday,17:10-15:11

Friday,21:10-23:11"""

list_ = [i.strip('\n') for i in io.StringIO(file).readlines() if i != "\n"]

weekday = dict(zip(["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],[0,1,2,3,4,5,6]))

def get_min(time_str):
    day,time = time_str.split(",")
    h1, m1 = time.split('-')[0].split(":")
    h2, m2 = time.split('-')[1].split(":")
    return weekday[day]*24*60 + int(h1)*60 + int(m1) + ((int(h2)* 60 + int(m2))/24*60)

with open("output.txt", "w") as outfile:
    outfile.write('\n\n'.join(sorted(list_, key=get_min)))
    print('\n\n'.join(sorted(list_, key=get_min)))
使用以下内容创建“output.txt”:


使用转换为
datetime
对象。然后,您可以使用标准比较,例如,
sorted()
使用的比较。这些日期不清楚是哪一周。你应该用不同的格式保存日期。不要混淆您想要显示日期的方式以及日期和时间的明确表示。如果您存储该日期格式,并且一旦您读取该文件,它们就会将格式更改为该格式,那么这样的任务就会容易得多。只需编写
key=get_min(x)
就可以了。您的
get_min
不会排序
“周一,09:50-11:32”
“周一,09:50-11:30”
import io

file= """Monday,10:50-11:32

Friday,18:33-18:45

Sunday,17:10-17:31

Sunday,17:10-15:11

Friday,21:10-23:11"""

list_ = [i.strip('\n') for i in io.StringIO(file).readlines() if i != "\n"]

weekday = dict(zip(["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],[0,1,2,3,4,5,6]))

def get_min(time_str):
    day,time = time_str.split(",")
    h1, m1 = time.split('-')[0].split(":")
    h2, m2 = time.split('-')[1].split(":")
    return weekday[day]*24*60 + int(h1)*60 + int(m1) + ((int(h2)* 60 + int(m2))/24*60)

with open("output.txt", "w") as outfile:
    outfile.write('\n\n'.join(sorted(list_, key=get_min)))
    print('\n\n'.join(sorted(list_, key=get_min)))
Monday,10:50-11:32

Friday,18:33-18:45

Friday,21:10-23:11

Sunday,17:10-15:11

Sunday,17:10-17:31