namor
namor

Reputation: 97

CSV string to decimal in python list

I am using an API that returns what appears to be a CSV string that i need to parse for two decimal numbers and then need to append those numbers to separate lists as decimal numbers (also while ignoring the timestamp at the end):

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

Processing time is a factor in this situation so, what is the fastest way to accomplish this?

Upvotes: 1

Views: 337

Answers (3)

Elad Joseph
Elad Joseph

Reputation: 3068

Fastest way is to use regular expression. Readability is another issue..

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))

Upvotes: 1

Doron Cohen
Doron Cohen

Reputation: 1046

Split the string by comma:

>>> string_values = returned_string_from_API.split(',')
>>> string_values
['0', 'F', 'F', '1.139520', '1.139720', '0', '0', '20160608163132000']

Get the values from string:

>>> string_values[3:5]
['1.139520', '1.139720']

Convert to float:

>>> decimal_values = [float(val) for val in string_values[3:5]]
>>> decimal_values
[1.13952, 1.13972]

Get min and max in the appropriate list:

>>> 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]

Upvotes: 2

user565447
user565447

Reputation: 999

1) The version which does not rely on 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) try pandas package

Upvotes: 1

Related Questions