2016-05-24 5 views
1

私は、ジョブをファイルに記録し、次にジョブを日付別にソートし整理するプログラムを作成しています。エントリは、テキストファイルの最後に追加されたリストです。これらはファイルに次のように表示されます。日付に基づいてフレーズを検索するために、テキストドキュメントの行を並べ替えるにはどうすればよいですか?

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シェルにジョブを印刷できるようにしたいと考えています。私は各行をリスト内の項目に変換し、期限付き文字で何かを行い、そのようにソートすることを考えていました。私はそのようにすれば、すべてを一緒に保つ方法を理解できません。何かご意見は?

+0

あなたは、によって最古の "終了" の日付やソートされている日付のPython 2.7のシェルで最も早い「開始」日付? – beoliver

答えて

1

datetime.datetime.strptimeを使用して、日付文字列をdatetimeオブジェクトに解析します。次に、日付順にジョブのリストをソートして出力します。ここで

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

私は、これはあなたが素敵な日付形式を選んだので、何をしたいんだと思います:

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) 

*を使用してフォーマットし、開梱文字列を使用して
>>> 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 
関連する問題