2014-05-13 3 views
-1

Есть ли способ, как разбор строки, содержащей дату в некотором формате и значение? Я ищу общее решение. Я пишу скрипт, который должен проверять строку. Мой ввод - это формат строки и времени. Например:Линия анализа с неизвестными разделителями

в первом файле и известный формат времени

[10:17:21 20.04.1911] 890.584 
[%H:%M:%S %d.%m.%Y] 

во втором файле и известном формате

10:17:21-20.04.1911 890.584 
%H:%M:%S-%d.%m.%Y 

времени в третьем файле и известный формат времени

(20-04-1911) 890.584 
(%d-%m-%Y) 

в четвертый файл и известный формат времени

и т. Д.
У меня уже есть функция, чтобы получить временную метку с даты в соответствии с форматом времени, но я не знаю, как анализировать дату с этой строки.
Любые идеи? Благодарю.

+0

привет! что вы пробовали с точки зрения регулярных выражений? – arturomp

+0

Возможный дубликат [Как я могу проанализировать строку времени, содержащую миллисекунды в ней с помощью python?] (Http://stackoverflow.com/questions/698223/how-can-i-parse-a-time-string-containing-milliseconds -in-it-with-python) – ElGavilan

+0

Вы имеете в виду использование regex для копирования соответствия переменной? У вас нет примера? – Majzlik

ответ

1

Я хотел бы использовать try здесь:

import datetime 

def parse_date(line): 
    for template, length in [("[%H:%M:%S %d.%m.%Y]", 21), 
          ("%H:%M:%S-%d.%m.%Y", 19), ...]: 
     try: 
      return datetime.datetime.strptime(line[:length], template) 
     except ValueError: 
      pass 

Это будет работать через все шаблоны, returndatetime объект, если он может извлечь один из line и return None, если ни один из шаблонов матча.

+0

Thats it! Он отлично работает, за исключением len (шаблон). Если есть% Y в шаблоне формы даты, это означает 4 символа (полный год), поэтому мне нужно сделать условие, но это не проблема. – Majzlik

+0

Ах, извините. Вместо условного, вы можете иметь список кортежей '(шаблон, длина)' и перебирать эти пары. – jonrsharpe

Смежные вопросы