Как отформатировать строку даты, если вы не знаете формат ввода даты? - PullRequest
0 голосов
/ 02 июля 2018

Я должен прочитать тонну файлов, основываясь на их имени. Они могут отличаться от формата Y-M-D, YMD, M_D_Y или Y_M_D. Могут быть и другие, но на данный момент это все, что мне дано для работы.

Мне нужно иметь возможность извлечь даты, которые я уже сделал, используя регулярное выражение, и отформатировать их в форму YMD. Например, если моей входной строкой является 06_12_2018, мне нужно иметь возможность отформатировать ее в 20180612, чтобы позже я мог сделать сравнение с другим файлом.

Что я пробовал до сих пор:

def cleanDate(date):
    datePatterns = [“%Y%m%d”, “%Y_%m_%d”, “%Y-%m-%d”, “%m_%d_%Y”]
    for pattern in datePatterns:
        if date in datePatterns:
            return datetime.strftime(date, “%Y%m%d”)
        else:
            print “String format not found!”
            return

Теперь, когда я смотрю на это, нет смысла делать if date in datePatterns. Каков наилучший способ приблизиться к этому?

1 Ответ

0 голосов
/ 02 июля 2018

Лучшим способом будет использовать try / кроме:

for pattern in datePatterns:
    try:
        return datetime.strptime(date, pattern)
    except ValueError:
        pass
else:
    # none of the datePatterns worked
    raise Exception('failed to parse')

Обратите внимание, что здесь нужно strptime, а не strftime. Напоминание для влажной посуды: p для p arsing, f для f ormatting.

Они могут отличаться от формата Y-M-D, YMD, M_D_Y или Y_M_D. Могут быть и другие, но на данный момент это все, что мне дано для работы.

Если возможны другие форматы, рассмотрите вариант использования dateutil.parser, который использует эвристику для угадывания формата. Это довольно популярный, проверенный в бою и надежный.

>>> from dateutil.parser import parse  # pip install python-dateutil
>>> parse("2018-05-12")
datetime.datetime(2018, 5, 12, 0, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...