datetime из строки с гибким форматом строки - PullRequest
1 голос
/ 17 января 2020

Я анализирую дату и время из строки в Python. Мне нравится тот факт, что в pandas я могу определить 1 отдельный формат, но pandas все еще позволяет мне быть гибким в своем вводе.

>>> format = '%Y%m%d %H:%M:%S.%f'
>>> pd.to_datetime('20200106 23:00', format=format)
Timestamp('2020-01-06 23:00:00')          ## OK
>>> pd.to_datetime('20200106 23:00:00', format=format)
Timestamp('2020-01-06 23:00:00')          ## OK
>>> pd.to_datetime('20200106 23:00:00.000', format=format)
Timestamp('2020-01-06 23:00:00')          ## still ok

С Pandas я могу принять пользовательский ввод, который выглядит как %H:%M или %H:%M:%S, или %H:%M:S.%f. Пока это не нарушает оригинальный формат, это хорошо. Мне нравится эта гибкость.

Существует ли такое же поведение в datetime?

>>> datetime.strptime('20200106 23:00:00.000000', format)
datetime.datetime(2020, 1, 6, 23, 0)                 ## OK
>>> datetime.strptime('20200106 23:00:00', format)   ## NOT OK
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/_strptime.py", line 565, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/usr/lib64/python3.6/_strptime.py", line 362, in _strptime
     (data_string, format))
ValueError: time data '20200106 23:00:00' does not match format '%Y%m%d %H:%M:%S.%f'

strptime не нравится. Что я должен сделать? Список всех форматов, которые может вставить пользователь? И делать кучу попыток?

1 Ответ

0 голосов
/ 17 января 2020

Для этого есть пакет (ы):

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

...