Python Identify (конвертировать) текст на сегодняшний день - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь найти лучший способ конвертировать "пятницу 1 марта 2019 года" или "субботу 2 марта 2019 года" в объект python datetime.

Я пытался разделить, чем думал о регулярных выражениях, но я уверен, что есть более «элегантный» способ сделать это

Из строки «Пятница, 1 марта 2019 года», я ожидаю 01-03-2019 или 2019-03-01

TNX!

Ответы [ 3 ]

6 голосов
/ 25 марта 2019

Может быть, не самый лучший способ, но очень простой способ - парсер dateutil

from dateutil import parser
parser.parse("Friday 1st March 2019")

Возвращает:

datetime.datetime(2019, 3, 1, 0, 0)

Это может быть в значительной степени обернуто как:

from dateutil import parser
from datetime import datetime as dt
dt.strftime(parser.parse("Friday 1st March 2019"), "%d-%m-%Y")

Возвращение:

'01-03-2019'
1 голос
/ 25 марта 2019

Пожалуйста, обратитесь к уже отвеченному вопросу: Как получить datetime из строки, содержащей '2nd' для даты в Python?

Как я могу только повторить, решение состоит в том, чтобы использовать парсер dateutil:

from dateutil.parser import parse

your_string = "Friday 1st March 2019"
date_obj = parse(your_string)

За кулисами, я думаю, части "1-й" и "2-й" извлекаются каким-то образом (например, расщепление + регулярное выражение) и упрощаются только до значения дня. В соответствии с таким вводом, общая библиотека даты и времени может использоваться с правильной строкой формата даты:

import datetime
simplified_txt = "Friday 1 March 2019"
datetime_obj = datetime.datetime.strptime(simplified_txt,"%A %d %B %Y")
1 голос
/ 25 марта 2019

У вас возникнут проблемы с 1st, 2nd.

Итак, попробуйте это (без добавления какой-либо внешней / сторонней библиотеки):

import re
from datetime import datetime as dt
ds = "Friday 1st March 2019"
parts = ds.split(" ")
ds = "{} {} {} {}".format(
   parts[0],
   re.sub('[^0-9]','', parts[1]),
   parts[2],
   parts[3]
)
a = dt.strptime(ds, "%A %d %B %Y")

Если выхотите превратить это в функцию, сделайте это:

def convdate(s):
    parts = s.split(" ")
    ds = "{} {} {} {}".format(
        parts[0],
        re.sub('[^0-9]','', parts[1]),
        parts[2],
        parts[3]
    )
    return dt.strptime(ds, "%A %d %B %Y")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...