2016-02-22 21 views
0

我有一個文件(基於類項目)刮過的Tweets。此文件中的行看起來像:Python - 對文件中的行進行排序通過正則表達式日期匹配

@soandso something something <a href="http://pic.twitter.com/aphoto</a><a href="a link" target="_blank">Permalink</a> 1:40 PM - 17 Feb 2016<br><br> 
@soandso something something <a href="http://pic.twitter.com/aphoto</a><a href="a link" target="_blank">Permalink</a> 1:32 PM - 16 Feb 2016<br><br> 

我想按日期排序文件中的行。這是我迄今拼湊在一起的東西。

import re 
from datetime import datetime 

when = re.compile(r".+</a>(.+)<br><br>") 

with open('tweets.txt','r+') as outfile: 
    sortme = outfile.read() 

    for match in re.finditer(when, sortme): 
     tweet = match.group(0) 
     when = match.group(1) 
     when = datetime.strptime(when, " %I:%M %p - %d %b %Y") 
     print when 

這將打印出所有行的日期已經轉換的格式 從1:40 PM - 2016年2月17日至2016年2月17日13時四十零分00秒,我相信這是一個日期時間。在過去的幾天裏,我搜索了很多關於如何通過日期時間對文件中的所有行進行排序的線索。謝謝你的幫助!

回答

0

看來你已經解決了這個問題,正則表達式...所以你的時間值轉換爲可測量的量轉換成秒,像這樣:

import time 
time.mktime(when.timetuple()) 

然後進行排序,你可以做出很多關不同的路線。最簡單的例子是:

import operator 
s = [("ab",50),("cd",100),("ef",15)] 
print sorted(s,key=operator.itemgetter(1)) 
## [('ef', 15), ('ab', 50), ('cd', 100)] 
+0

1-無需在此處將日期時間轉換爲秒。您可以直接比較datetime對象2-'mktime()'不正確,除非由於某些原因tweets使用本地時區。 – jfs

1

我已搜查高和低,在過去幾天關於如何我然後進行排序的所有文件中的行的日期時間的線索。

def get_time(line): 
    match = re.search(r"</a>\s*(.+?)\s*<br><br>", line) 
    if match: 
     return datetime.strptime(match.group(1), "%I:%M %p - %d %b %Y") 
    return datetime.min 

lines.sort(key=get_time) 

它假定時間是在給定的時間內(例如,沒有DST轉換),否則你應該輸入時間轉換爲UTC(或POSIX時間戳)第一單調。

+0

謝謝!涼! (唉,作爲一個noob我無法進一步upvote你的答案) – Woolwit