2014-01-22 88 views
0

我需要製作一個python函數來打開文件,讀入文本,然後在Python GUI上輸出任何包含日期的條目。有效日期的例子包括「1/30/10」,「1/30/2010」,「1-30-2010」,「01-30-2010」,「30.1.2010」,「30. 1. 2010」 ,和「2010-01-30」。它應該有少量誤報,例如「13010」,「01302010」或「30-30-10」作爲日期。Python過濾和從列表中選擇

我有什麼到目前爲止,這是

import sys 

def main(): 
    infile = open('testdate.txt', 'r') 

    for line in infile: 
     words = line.split() 
     for date in words: 
      if ____ in date: 
       print date 


    infile.close() 

main() 

我知道line.split()功能能夠將所有條目在文本文件中分離出來。我不確定的是如何循環訪問這個新列表並且只接收日期。我將如何去過濾僅日期?

+0

查看[datetime.strptime](http://docs.python.org/2/library/datetime.html#datetime.datetime.strptime)。列出所有可能的日期格式(在文件中)並嘗試解析;如果解析成功,則打印。 – mshsayem

+0

我將如何去使用datetime.strptime(date_string,格式)?我猜我需要導入datetime,那麼date_string究竟是什麼?當我循環「單詞」中的項目時,這是我正在查看的變量嗎?而對於格式,我該如何使用這些格式? – Phirip

+0

下面是一些使用家庭釀造和第三方解析器解析多種格式日期的好問題。除此之外,它看起來像你在正確的軌道上。 http://stackoverflow.com/questions/7048828/how-can-i-parse-multiple-unknown-date-formats-in-python –

回答

0

找出所有可能的格式並嘗試解析這些格式。這可能有所幫助:

>>> from datetime import datetime 
>>> possible_fmts = ["%m/%d/%y","%m/%d/%Y","%m-%d-%y","%m-%d-%Y","%d.%m.%Y","%d. %m. %Y","%Y-%m-%d"] 
>>> test_text = "1/30/10,1/30/2010,1-30-2010,01-30-2010,30.1.2010,30. 1. 2010,2010-01-30" 
>>> for date_token in test_text.split(','): 
     for fmt in possible_fmts: 
      try: 
       print datetime.strptime(date_token, fmt) 
       break 
      except ValueError, e: 
       pass 


2010-01-30 00:00:00 
2010-01-30 00:00:00 
2010-01-30 00:00:00 
2010-01-30 00:00:00 
2010-01-30 00:00:00 
2010-01-30 00:00:00 
2010-01-30 00:00:00