我正在使用python,并希望读取包含时间信息的日志文件。
字符串是这样的:" 1小时22.5秒"。或" 41秒"或者" 22.3秒&#34 ;;不确定什么是处理这种情况的最佳方法。我无法控制数据的编写方式,我可以处理它。
我在想读字符串;然后将它分成单个字符串;所以,如果我发现"小时"在字符串列表中的位置[2],我在一个int变量中添加3600秒;如果我找到分钟然后我得到值并检查它是否有小数,并解析它;如果存在则将其添加到小时。
这是合理的还是有更好的方法?有点容易出错,将转换基于不同字符串可能不相同的位置。
答案 0 :(得分:1)
使用正则表达式:
new SelectListDescriptor(nameof(Country.CountryCode), nameof(Country.CountryName), countries)
答案 1 :(得分:0)
我认为你的想法并不坏。我会使用正则表达式来查找小时,分钟和秒的出现,并使用分组来获取相应的数字。作为小时情况的一个例子,考虑一下:
hours = re.match(r'(\d{1,2})(\shour[s]?)', "1 hour and 50 minutes")
if hours:
seconds = hours.group(1) * 60 * 60
括号()
允许分组,这样您就可以轻松提取数字。你可以在几分钟和几秒钟内执行相同的操作。如果正则表达式没有返回任何内容,hours
将为None
,因此您可以轻松检查if hours:
,然后对转换后的字符串执行数学运算。
答案 2 :(得分:0)
如果没有正则表达式,你可以这样做:
times = ['1 hour and 22.5 seconds', '3 hours 4 minutes and 15 seconds', '22.3 seconds', '6 hours']
# attempt to normalize the input data
times = [t.lower().replace('and','').replace('hours','hour').replace('minutes','minute').replace('seconds','second').replace(' ',' ') for t in times]
secondsList = map(getseconds, times)
def getseconds(sTime):
seconds = 0.0
S = sTime.split()
if 'hour' in S:
seconds += (3600 * float(S[S.index('hour')-1]))
if 'minute' in S:
seconds += (60 * float(S[S.index('minute')-1]))
if 'second' in S:
seconds += float(S[S.index('second')-1])
return seconds