Как я могу сортировать предложения на основе дат, содержащихся в них, используя Python - PullRequest
0 голосов
/ 30 мая 2019

У меня есть несколько параграфов данных о клиентах.Каждый абзац начинается с дд.мм.гггг чч: мм: сс.Мне нужно отсортировать эти абзацы на основе отметки даты и времени, содержащейся в них

Мне нужно использовать Python для этого.Я пробовал regex на python, но не получил вывод

Код:

*sep2 = '([0-3]?\d)[- \/.](0\d|1[0-2])[- \/.]((19|20)\d\d) ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)'  
text2 = text1.split(sep2)  
print(text2)*

Вход содержит абзацы, которые не разделены по дате.пример одного абзаца:

21.01.2017 09:05:56 abcsdfasklfvd 02.01.2017 09:05:56 afgdsfggv 

Ожидаемый результат:

text2[0] = 21.01.2017 09:05:56 abcsdfasklfvd  
text2[1] = 02.01.2017 09:05:56 afgdsfggv

, затем я хочу применить некоторую функцию сортировки на основе возрастающей даты, которая выдала бы

ожидаемый результат:

sorted[0] = 02.01.2017 09:05:56 afgdsfggv  
sorted[1] = 21.01.2017 09:05:56 abcsdfasklfvd

1 Ответ

1 голос
/ 30 мая 2019
from datetime import datetime 

text = ["21.01.2017 09:05:56 abcsdfasklfvd", "02.01.2017 09:05:56 afgdsfggv"]
sorted(text, key=lambda s: datetime.strptime(s[0:19], '%d.%m.%Y %H:%M:%S'))

Если шаблон dd.mm.yyyy hh:mm:ss не появляется внутри абзацев, тогда вы можете использовать

text1 = "21.01.2017 09:05:56 abcsdfasklfvd 02.01.2017 09:05:56 afgdsfggv"

text = list()
for d, t in zip(*[iter(re.split(r'(\d+.\d+.\d+ \d+:\d+:\d+)', text1)[1:])]*2):
    text.append(d + t)

sorted(text, key=lambda s: datetime.strptime(s[0:19], '%d.%m.%Y %H:%M:%S'))

def extract(s):
    try:
        return datetime.strptime(s, '%d.%m.%Y %H:%M:%S')        
    except (ValueError):
        return datetime.strptime(s, '%d/%m/%Y %H:%M:%S')
sorted(text, key=lambda s: extract(s[0:19]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...