使用 python 在嵌套列表中将 AM、PM 转换为 24
Convert AM,PM to 24 in a nested list using python
我有一个带有 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)
这是模式匹配,所以我可能会使用正则表达式来查找要替换的时间:
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']]
我有一个带有 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)
这是模式匹配,所以我可能会使用正则表达式来查找要替换的时间:
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']]