Разбор Python Dateutil: минимальное количество компонентов - PullRequest
2 голосов
/ 17 июня 2019

Пакет python dateutils позволяет анализировать дату (время) без указания формата. Он пытается всегда возвращать дату, даже если ввод не выглядит как один (например, 12). Какой бы питонный способ обеспечить присутствие по крайней мере компонента дня, месяца и года во входных данных?

from dateutil import parser

dstr = '12'
dtime = parser.parse(dstr)

Возвращает 2019-06-12 00:00:00

1 Ответ

2 голосов
/ 17 июня 2019

Один из способов сделать это - разделить входную строку на вероятные разделители даты (например, ., -, :). Таким образом, вы можете ввести 2016.5.19 или 2016-5-19.

from dateutil import parser
import re

def date_parser(thestring):

    pieces = re.split('\.|-|:', thestring)

    if len(pieces) < 3:
        raise Exception('Must have at least year, month and date passed')

    return parser.parse(thestring)

print('---')
thedate = date_parser('2019-6-12')
print(thedate)

print('---')
thedate = date_parser('12')
print(thedate)

Будет выведено:

---
2019-06-12 00:00:00
---
Traceback (most recent call last):
  File "bob.py", line 18, in <module>
    thedate = date_parser('12')
  File "bob.py", line 9, in date_parser
    raise Exception('Must have at least year, month and date passed')
Exception: Must have at least year, month and date passed

Таким образом, первый проходит, это 3 "части" на дату. Второй нет.

Это будет хитро в зависимости от того, что в re.split, нужно будет убедиться, что все правильные разделители там.

Вы можете удалить : в разделителях, если хотите просто типичные разделители даты.

...