2014-01-22 5 views
0

Мне нужно сделать функцию python, которая открывает файл, читает в тексте, а затем выводит на GUI Python любые записи, содержащие даты. Примеры действительных дат включают «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, format)? Я предполагаю, что мне нужно будет импортировать 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 
Смежные вопросы