2013-09-26 72 views
2

我正在尋找從字符串解析日期。這個字符串可以容納不同的格式,我事先不知道。在Python中分析日期的優雅方式

from datetime import datetime 

try: 
    return datetime.strptime(text, '%m/%d/%Y')) 
except: 
    try: 
     return datetime.strptime(text, '%m/%d/%y')) 
    except: 
     try: 
      return datetime.strptime(text, '%Y/%m/%d')) 
     except: 
      try: 
       return datetime.strptime(text, '%b%d/%Y')) 
      except: 
       return None 

顯然,這看起來太冗長了。我確信使用地圖有更好的方法,但我真的很想聽聽你的意見 - 我討厭重新發明輪子。

+6

你至少可以使用一個循環。 –

+1

檢查http://stackoverflow.com/questions/7048828/how-can-i-parse-multiple-unknown-date-formats-in-python – Rami

+0

出於某種原因,我不想使用dateutils.parse。比方說,我有一小組格式描述。循環顯然更好。 – martincho

回答

6
from datetime import datetime 

def getdate(text): 
    formats = ('%m/%d/%Y', '%m/%d/%y', '%Y/%m/%d', '%b%d/%Y') 
    for format in formats: 
     try: 
      return datetime.strptime(text, format) 
     except: 
      pass 
4

如何循環提供的格式優先級?

from datetime import datetime 

def convert(text): 
    for format in [ '%m/%d/%Y', '%m/%d/%y', '%Y/%m/%d', '%b%d/%Y' ]: 
     try: 
      return datetime.strptime(text, format) 
     except: 
      continue 
    return None 
+0

修復return語句中的'SyntaxError',在'except'(吞嚥上面的SyntaxError)中指定異常,並且'continue'只是一個'pass' :) –

+0

'.strptime()'永遠引發除ValueError之外的任何事情? –

+0

如果我們用'strptime(None,'%m /%d')'調用它,它也會引發'TypeError',我猜在一些極少數情況下也會出現內存異常 – lejlot