Как получить модель strptime с доступным объектом string и datetime? - PullRequest
0 голосов
/ 27 марта 2020

Предположим, у меня есть большой набор строк, которые я хочу проанализировать для набора объектов datetime. Я мог бы использовать dateutils.parser и выполнять итерацию по набору, но он более требователен к компьютеру и занимает больше времени, чем синтаксический анализ, извлекая примененный формат strptime, и просто делаю datetime.strptime(string, model).

Я хотел создать функция, похожая на следующую:

def retrieve_format(datetime_object, string):
    #do some things
    return model

со строкой model.

Я не нашел ничего, что объясняло бы внутреннюю работу синтаксического анализатора dateutils, и я считаю, что у разработчиков есть возможность добавить такую ​​функцию.

Есть идеи, как это сделать? Это сэкономит время и вычислительные мощности.

Пример

Предположим, у меня есть набор строк, которые отформатированы так же, как этот:

myStr = '27/03/2020 - 16:20'

Я мог бы сделать

myDate = dateutils.parser.parse(myStr)

и получить myDate как

datetime.datetime(2020, 3, 27, 16, 20)

, но теперь я мог использовать свою функцию как таковую

>>> model = retrieve_format(myDate, myStr)
>>> print(model)
%d/%m/%Y - %H:%M

Тогда я мог бы сделать

datetime_set = {}
for formatted_string in set:
    raw = datetime.datetime.strptime(formatted_string, model)
    datetime_set.add(raw)

, чтобы очень эффективно обработать все остальные элементы.

1 Ответ

0 голосов
/ 28 марта 2020

Хорошо, благодаря комментарию snakecharmerb на мой вопрос, я нашел этот комментарий , который использует библиотеку dateinfer . Здесь нужна только строка. Возможна установка с pip

pip install pydateinfer

Рабочий пример будет следующим:

import dateinfer
dateinfer.infer(['27/03/2020 - 16:20', '28/03/2020 - 14:56' ])

, а на выходе будет

'%d/%m/%Y - %H:%M'

Вводом всегда является список, даже если он содержит только один элемент. В зависимости от неоднозначности строки в списке должно быть больше или меньше элементов. Это связано с тем, что, например, в '04/04/2020' у нас нет средств для различения дня или месяца.

...