我正在使用一个返回看起来像CSV字符串的API,我需要解析两个十进制数,然后需要将这些数字作为十进制数附加到单独的列表中(同时忽略最后的时间戳):
returned_string_from_API = '0,F,F,1.139520,1.139720,0,0,20160608163132000'
decimal_lowest_in_string = []
decimal_highest_in_string = []
处理时间是这种情况的一个因素,那么,实现这一目标的最快方法是什么?
答案 0 :(得分:2)
用逗号分隔字符串:
>>> string_values = returned_string_from_API.split(',')
>>> string_values
['0', 'F', 'F', '1.139520', '1.139720', '0', '0', '20160608163132000']
从字符串中获取值:
>>> string_values[3:5]
['1.139520', '1.139720']
转换为float
:
>>> decimal_values = [float(val) for val in string_values[3:5]]
>>> decimal_values
[1.13952, 1.13972]
在适当的列表中获取最小值和最大值:
>>> decimal_lowest_in_string = []
>>> decimal_highest_in_string = []
>>> decimal_lowest_in_string.append(min(decimal_values))
>>> decimal_lowest_in_string
[1.13952]
>>> decimal_highest_in_string.append(max(decimal_values))
>>> decimal_highest_in_string
[1.13972]
答案 1 :(得分:1)
最快的方法是使用正则表达式。可读性是另一个问题..
import re
returned_string_from_API = '0,F,F,1.139520,1.139720,0,0,20160608163132000'
decimal_lowest_in_string = []
decimal_highest_in_string = []
re_check = re.compile(r"[0-9]+\.\d*")
m = re_check.findall(returned_string_from_API)
decimal_lowest_in_string.append(min(m))
decimal_highest_in_string.append(max(m))
答案 2 :(得分:1)
1)不依赖cvs的版本
returned_string_from_API = '0,F,F,1.139520,1.139720,0,0,20160608163132000'
def isfloat(value):
try:
float(value)
return True
except ValueError:
return False
float_numbers = filter(isfloat, returned_string_from_API.split(','))
2)尝试pandas包