Как парсить даты в разных форматах из Python-строки, если формат дат заранее неизвестен?

Всем доброго времени суток.

Возник такой вопрос. Допустим у нас есть строка(и), в которой встречаются даты в разных форматах. Есть необходимость все эти даты распарсить, определив формат.

Написал вот такие грабли. Но они учитывают только 3 формата даты, соответственно нужно потенциально знать все возможные форматы даты, которые в строке могут присутствовать.

# -*- coding: utf-8 -*-

from datetime import datetime
import re

date_string = u'''попробуем распарсить дату из этой строки, начнем с 2014-01-01,
закончим 05.01.2014, и напоследок посмотрим, что же было 05.06.14'''

date_line = re.findall('\d{4}-\d{2}-\d{2}|\d{2}.\d{2}.\d{4}|\d{2}.\d{2}.\d{2}',date_string)

formats = ['%Y-%m-%d','%d.%m.%Y','%d.%m.%y']
result_dates = []

for dt in date_line:
    for ft in formats:
        try:
            result_dates.append(datetime.strptime(dt,ft))
        except:
            next

for i in result_dates:
    print i

##>>> 
##2014-01-01 00:00:00
##2014-01-05 00:00:00
##2014-06-05 00:00:00


Подскажите, если сталкивались с чем-то похожим.

Спасибо.

UPD: dateutil (по подсказке из комментариев) упрощает процесс.
Но всё-равно нельзя парсить всю строку целиком. Нужно сначала найти элементы в строке:

import re
from dateutil import parser

date_string = u'''попробуем распарсить дату из этой строки, начнем с 2014-01-01,
закончим 05.01.2014, и напоследок посмотрим, что же было 05.06.14'''

date_line = re.findall('\d{4}-\d{2}-\d{2}|\d{2}.\d{2}.\d{4}|\d{2}.\d{2}.\d{2}',date_string)

for dt in date_line:
    print parser.parse(dt)

##>>> 
##2014-01-01 00:00:00
##2014-01-05 00:00:00
##2014-06-05 00:00:00
  • Вопрос задан
  • 7460 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lPolar
data scientist
так же можно использовать pandas и его встроенный парсер:
import pandas as pd
dates = [] #тут список строк с датой
parsed_dates = [pd.to_datetime(d) for d in dates]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы