2016-06-09 3 views
1

두 개의 십진수를 구문 분석하고 10 진수로 분리 된 목록에 해당 숫자를 추가해야하는 CSV 문자열 인 결과를 반환하는 API를 사용하고 있습니다 (또한 무시하는 동안 끝에있는 시간 소인) :파이썬 목록에서 CSV 문자열을 십진수로 변환

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

문자열에서 값 가져 오기 :

,363,210
>>> 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에 의존하지 않는 버전) 시도 팬더 패키지

관련 문제