所以说我有一个像这样的列表:
runtimes = ['24 min per ep',
'1 hr 55 min',
'24 min per ep',
'25 min per ep',
'23 min per ep',
'23 min per ep',
'23 min per ep',
'27 min per ep',
'24 min per ep',
'23 min per ep',
'24 min',
'22 min per ep',
'25 min per ep',
'24 min per ep',
'23 min per ep',
'24 min per ep',
'24 min per ep',
'24 min per ep',
'24 min per ep',
'1 hr 41 min',
'1 hr 27 min',
'25 min per ep',
'1 hr 22 min',
'30 min per ep',
'25 min per ep',
'1 hr 31 min',
'2 hr 4 min',
'24 min per ep',
'24 min per ep']
我想将这些值转换为纯粹的分钟数:
[我首先认为最好使用下面的两个正则表达式将“ 1 hr”替换为“ 60 min”,然后删除所有非数字,但这似乎并不理想。
re.sub("1 hr", "60 min", runtimes))
re.sub("\D", "", runtimes)
如果有人知道更好的方法,将不胜感激。
[如果您还有其他问题,请告诉我。
谢谢您的帮助。
这很简单,无需使用任何特殊类型的解析器即可进行编码:
def parse_runtime(runtime):
mins = 0
fields = runtime.split()
for idx in range(0, len(fields)-2):
if fields[idx+1] in ('min', 'mins', 'minutes'):
mins += int(fields[idx])
elif fields[idx+1] in ('hr', 'hrs', 'hours'):
mins += int(fields[idx]) * 60
return mins
runtime_mins = []
for runtime in runtimes:
try:
mins = parse_runtime(runtime)
runtime_mins.append(mins)
except ValueError:
print('Bad runtime: ' + runtime)
print(runtime_mins)
在纯python中,您可以尝试以下操作:
runtimes_min=[]
for r in runtimes:
r=r.replace('per ep', '')
hour = 0
times = r.split('hr')
if len(times) > 1:
hour = times[0]
minutes = times[1].split('min')[0]
else:
minutes=r.split('min')[0].rstrip()
runtimes_min.append(f"{int(hour)*60 + int(minutes)} min per ep")
['24 min per ep',
'115 min per ep',
'24 min per ep',
'25 min per ep',
'23 min per ep',
'23 min per ep',
'23 min per ep',
'27 min per ep',
'24 min per ep',
'23 min per ep',
'24 min per ep',
'22 min per ep',
'25 min per ep',
'24 min per ep',
'23 min per ep',
'24 min per ep',
'24 min per ep',
'24 min per ep',
'24 min per ep',
'101 min per ep',
'87 min per ep',
'25 min per ep',
'82 min per ep',
'30 min per ep',
'25 min per ep',
'91 min per ep',
'124 min per ep',
'24 min per ep',
'24 min per ep']