python列表中的CSV字符串到十进制

时间:2016-06-09 08:30:21

标签: python csv

我正在使用一个返回看起来像CSV字符串的API,我需要解析两个十进制数,然后需要将这些数字作为十进制数附加到单独的列表中(同时忽略最后的时间戳):

returned_string_from_API = '0,F,F,1.139520,1.139720,0,0,20160608163132000'
decimal_lowest_in_string = []
decimal_highest_in_string = []

处理时间是这种情况的一个因素,那么,实现这一目标的最快方法是什么?

3 个答案:

答案 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包