Преобразуйте AM, PM в 24 во вложенном списке, используя python - PullRequest
1 голос
/ 02 августа 2020

У меня есть вложенный список с форматом времени AM, PM. Я хочу преобразовать их в 24-часовой формат. Я написал код, который преобразует время в 24, но результат не соответствует действительности. Что не так в моем коде?

mylist =  [
    ['x', '06:00 - 09:30 AM - 10:30 AM , 02:00 PM - 05:00 PM - 09:00 PM'],
    ['y', '07:30 AM - 02:30 PM, 07:30 AM , 02:30 PM, 07:30 AM - 01:30 PM']
]

correctResult= [['x', '06:00 - 09:30 AM - 10:30 AM - 14:00 PM - 17:00 PM - 21:00 PM'],
    ['y', '07:30 AM - 14:30 PM, 07:30 AM - 14:30 PM, 07:30 AM - 13:30 PM']]

myresult = [
['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['x', ['06:00', '09:30', '10:30', '14:00', '17:00', '21:00']], ['y', ['07:30', '02:30 PM, 07:30 AM', '02:30 PM, 07:30 AM', '13:30']], ['y', ['07:30', '02:30 PM, 07:30 AM', '02:30 PM, 07:30 AM', '13:30']], ['y', ['07:30', '02:30 PM, 07:30 AM', '02:30 PM, 07:30 AM', '13:30']], ['y', ['07:30', '02:30 PM, 07:30 AM', '02:30 PM, 07:30 AM', '13:30']]
]

Код следующий:

def time24(timepmam):
    from datetime import datetime

    in_time = datetime.strptime(timepmam, "%I:%M %p")
    out_time = datetime.strftime(in_time, "%H:%M")
    return out_time

result = []

for x in mylist:
  res = x[0]

  ss = []
  for y in x[1].split(' - '):
      # print(y)
    if len(y) > 5 and len(y)<9:
          print(y)
          t = time24(y)
          ss.append(t)
    else:
        ss.append(y)
    s = ' '.join(ss)
    result.append([res, ss])

print(result)

1 Ответ

2 голосов
/ 02 августа 2020

Это сопоставление с образцом, поэтому я, вероятно, go для регулярного выражения, чтобы найти те времена, которые нужно заменить:

mylist =  [
    ['x', '06:00 - 09:30 AM - 10:30 AM , 02:00 PM - 05:00 PM - 09:00 PM'],
    ['y', '07:30 AM - 02:30 PM, 07:30 AM , 02:30 PM, 07:30 AM - 01:30 PM']
]

from datetime import datetime
import re

def time24(timepmam):
    # this function is only called for times that have PM in them
    # adding PM to a 24h time does not make sense at all - but can be done
    in_time = datetime.strptime(timepmam, "%I:%M %p")
    out_time = datetime.strftime(in_time, "%H:%M PM") # add the PM as well
    return out_time

def fix(s):
    # only find & fix PM`s
    pattern = r"\d\d:\d\d PM"
    for match in re.findall(pattern,s):
        s = re.sub(match, time24(match), s)
    return s

print(mylist)
for l in mylist:
    for idx,p in enumerate(l):
        l[idx] = fix(p)

print(mylist)

Вывод:

# before
[['x', '06:00 - 09:30 AM - 10:30 AM , 02:00 PM - 05:00 PM - 09:00 PM'], 
 ['y', '07:30 AM - 02:30 PM, 07:30 AM , 02:30 PM, 07:30 AM - 01:30 PM']]

# after
[['x', '06:00 - 09:30 AM - 10:30 AM , 14:00 PM - 17:00 PM - 21:00 PM'], 
 ['y', '07:30 AM - 14:30 PM, 07:30 AM , 14:30 PM, 07:30 AM - 13:30 PM']]
...