【问题标题】:How do I sort through lines of a text document to find a phrase based on a date?如何根据日期对文本文档的行进行排序以查找短语?
【发布时间】:2016-05-24 19:09:50
【问题描述】:

我正在编写一个程序,它将作业记录到文件中,然后按日期对作业进行排序和组织。这些条目是刚刚附加到文本文件末尾的列表。它们出现在文件中,如下所示:

2017-01-31,2016-05-24,test1
2016-05-15,2016-05-24,test2
2016-06-15,2016-05-24,test3
2016-07-16,2016-05-24,test4

他们遵循以下格式:截止日期、输入日期、职位。我希望能够按日期顺序将文本文件中的作业打印到 python shell,最接近日期的作业排在第一位。我正在考虑将每一行变成列表中的一个项目,对截止日期字符做一些事情,然后以这种方式进行排序。如果我这样做,我无法弄清楚如何将所有东西放在一起。有什么想法吗?

【问题讨论】:

  • 您是按哪个日期排序的,最早的“完成”日期还是最早的“开始”日期?

标签: list python-2.7 sorting date text-files


【解决方案1】:

使用datetime.datetime.strptime 将日期字符串解析为日期时间对象。然后只需按日期对作业列表进行排序并输出它们。

from datetime import datetime

date_str_format = '%Y-%m-%d'
jobs = []

with open('jobs.txt', 'r') as f:
    for line in f:
        date_due, date_entered, title = line.split(',')
        jobs.append((datetime.strptime(date_due, date_str_format),
                     datetime.strptime(date_entered, date_str_format),
                     title.strip()))

jobs.sort()

for date_due, _, title in jobs:
    print '{} (due {})'.format(title, date_due)

这里是jobs.txt的内容:

2017-01-31,2016-05-24,test1
2016-05-15,2016-05-24,test2
2016-06-15,2016-05-24,test3
2016-07-16,2016-05-24,test4

然后输出...

test2 (due 2016-05-15 00:00:00)
test3 (due 2016-06-15 00:00:00)
test4 (due 2016-07-16 00:00:00)
test1 (due 2017-01-31 00:00:00)

【讨论】:

    【解决方案2】:

    我认为这是你想要的,因为你选择了一个不错的日期格式:

    lines = """
    2017-01-31,2016-05-24,test1
    2016-05-15,2016-05-24,test2
    2016-06-15,2016-05-24,test3
    2016-07-16,2016-05-24,test4
    """
    
    sorted([entry.split(",") for entry in lines.split("\n") if any(entry)], reverse=True)
    

    在 Python 2.7 外壳中:

    >>> lines = """
    ... 2017-01-31,2016-05-24,test1
    ... 2016-05-15,2016-05-24,test2
    ... 2016-06-15,2016-05-24,test3
    ... 2016-07-16,2016-05-24,test4
    ... """
    >>> 
    >>> lines_sorted = sorted([entry.split(",") for entry in lines.split("\n") if any(entry)], reverse=True)
    >>> for line in lines_sorted:
    ...     print line
    ... 
    ['2017-01-31', '2016-05-24', 'test1']
    ['2016-07-16', '2016-05-24', 'test4']
    ['2016-06-15', '2016-05-24', 'test3']
    ['2016-05-15', '2016-05-24', 'test2']
    >>> 
    

    使用字符串格式化和使用*解包:

    output_str = "Due date: {0}\nDate entered: {1}\nJob title: {2}\n"
    
    entries_sorted = sorted([entry.split(",") for entry in lines.split("\n") if any(entry)], reverse=True)
    for entry in entries_sorted:
        print output_str.format(*entry)
    

    输出:

    Due date: 2017-01-31
    Date entered: 2016-05-24
    Job title: test1
    
    Due date: 2016-07-16
    Date entered: 2016-05-24
    Job title: test4
    
    Due date: 2016-06-15
    Date entered: 2016-05-24
    Job title: test3
    
    Due date: 2016-05-15
    Date entered: 2016-05-24
    Job title: test2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多