Нужно конвертировать действительные значения даты и вывести ошибочные значения в Python

1


Я использую Python3.6 datetime.datetime.strptime для анализа различных значений входных дат на основе предоставленного формата.
Ниже приведен код, который я использую.

def date_convert(dt, fmt):
    outdict = {'result': '', 'error': ''}
    try:
        outdict['result'] = datetime.strptime(dt, fmt)
    except Exception:
        outdict['error'] = 'Invalid input date value, expected format is ' + fmt

Я столкнулся с двумя проблемами с вышеуказанным кодом

  1. Невозможно распознать недопустимые значения даты для% Y% m% d,% y% m% d,% Y% m% d% H:% M и несколько других форматов. В Java у нас есть опция setLenient, которая поможет нам соответствовать точной и конвертируемой
    Пример: date_convert('181223', '%Y%m%d')
    Для вышеприведенного ввода я получаю вывод как 1812-02-03 00:00:00, но мне нужно получить вывод как недопустимый формат. Как достичь этого
  2. Несколько раз я получаю два или три формата даты в определенном столбце для нескольких файлов данных. Для этого я хочу передать список форматов, чтобы всегда соответствовать форматам, которые нужно использовать и преобразовывать.
    Пример: Ниже приведены значения одного поля, поступающего в файл. Я хочу передать somthing как ['% Y% m% d', '% m-% d-% y', '% d-% b-% Y'] и преобразовать все входные значения

    Date_Field
    2018-23-04
    2018-14-04
    03-17-18
    12-29-17
    25-Mar-2018
    29-Jan-2018

Спасибо,
Рагхунат.

Теги:
strptime

1 ответ

1

Попробуйте использовать модуль dateutil.

Демо - версия:

from dateutil import parser
d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
for i in d:
    print( parser.parse(i, dayfirst=True))

или dateparser

Демо - версия:

import dateparser
d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
for i in d:
    print( dateparser.parse(i))

Выход:

2018-04-23 00:00:00
2018-04-14 00:00:00
2018-03-17 00:00:00
2017-12-29 00:00:00
2018-03-25 00:00:00
2018-01-29 00:00:00
  • 0
    Привет Ракеш, я уже использовал этот модуль. Эта функция не может обрабатывать форматы, такие как% m% d% Y Пример: parser.parse ('03232018') и очень медленный по сравнению с datetime.strptime
  • 0
    dateparser должен работать для этого.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню