Member 13420558 Ответов: 1

Синтаксический анализ универсальной строки, хранящей день и время


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

1234	Mon-Tue 09:30 am - 1:00 pm
2345	Mon-Thu 1:00 pm - 3:00 pm , Fri 10:30 am - 3:00 pm
456	    Mon-Wed 9:00 am - 9:30 am , Tue 10:00 am - 3:00 pm , Fri 10:00 am - 2:00 pm




Мне нужно разделить второе значение, то есть свободное время, и проверить, свободен ли пользователь.

Моя задача заключается в том, как разбить полуструктурированные данные на список и найти нужное значение.

Спасибо,

Что я уже пробовал:

Вот что я попробовал.

# Мои данные в файле myfile. csv
"""
пользователь1 Пн-Вт 11: 30 - 1: 00
user2 Пн-Чт 2: 00 pm - 3 : 00 pm, Пт 11: 30 am - 4: 00 pm
пользователь3 пн-ср 9:00 утра - 9:30 утра , Вт 10:00 утра - 3:00 , Пт 10:00 утра - 2:00 вечера
пользователь4 Пн 10:00 утра - 10:30 утра , Вт 1:00 вечера - 3:00 , пт с 9:00 - 10:00 утра
user5 Пт 11: 00 - 11: 30
user6 Пн-Пт 9: 00 утра - 4: 30 вечера
user7 Пн-Ср 10: 30 - 11 : 30, Вт 11: 30 - 3 : 00, Пт 10: 00 - 2: 00
user8 Пн 10: 30 - 11 : 30, Вт 10: 00 - 3 : 00, пт 11: 00 - 2: 00
user9 пн-ср 9: 00 - 9: 30, Вт 10: 00 - 3 : 00, Пт 10: 00 - 2: 00
user10 Вт-Ср 10: 00-11: 30, пт 10: 00 - 2: 00
user11 Ср 11: 00-3: 30 вечера, Пт 11: 00 - 2: 00 вечера
user12 Пн 9: 00 - 3: 30 вечера, Пт 11: 00-2: 00 вечера
user13 Пт 11: 00-3: 30 вечера
user14 Wed 12: 00 am - 12: 30 pm
user16 Пт 10: 00 утра - 12: 00 вечера
"""


import csv
import re
 
userid = []
dates = []
num = []
let = []
 
pattern = re.compile(r'\b([A-Z][a-z]{2})\s*((-)\s*([A-Z][a-z]{2}))?\s*(\d?\d:\d\d *[aApP][Mm])')

with open('myfile.csv') as csvDataFile:
    csvReader = csv.reader(csvDataFile)
    for row in csvReader:
        userid.append(row[0])
        list_val = [item.strip() for item in row[1].split(',')]
        dates.append(list_val)
        print dates, list_val
        a = filter(pattern.match,dates)
        print str(a)
        for (letters, numbers) in filter(pattern.match,dates):
            num.append(numbers)
            let.append(letters)
            print(numbers, '*', letters)

PIEBALDconsult

Разделение забот - Не пытайтесь связать оба действия в одно.

1 Ответов