2016-06-09 45 views
1

我使用的API返回似乎是一個CSV字符串,我需要解析兩個十進制數,然後需要將這些數字作爲十進制數附加到單獨的列表(同時也忽略最後的時間戳):CSV字符串到python列表中的十進制

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

處理時間是這種情況下的一個因素,所以最快的方法是什麼?

+0

我不認爲csv模塊就在這裏,我只是用'STR .split(',')' – timakro

回答

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

這正是我想要的,謝謝Doron! – namor

+0

歡迎您。我認爲有一些方法可以使其更快,但這需要更多關於格式的信息。如果字符串中的值長度不變,則可以使用子字符串來提取「1.139520,1.139720」部分並將其拆分。因此不必處理整個輸入。 –

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)) 
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版)儘量熊貓包