문제

나는 이것처럼 보이는 줄을 가지고있다 :

"(8, 12.25), (13, 15), (16.75, 18.5)"

그리고 각각을 파이썬 데이터 구조로 변환하고 싶습니다. 바람직하게는 한 쌍의 플로트 값을 포함하는 튜플의 목록 (또는 튜플).

나는 그것을 할 수있다 eval("(8, 12.25), (13, 15), (16.75, 18.5)") 튜플의 튜플을 제공하지만 외부 정보를 순진하게 평가하는 것이 현명한 결정이라고 생각하지 않습니다.

그래서 나는 우아한 Pythonic 솔루션이 어떻게 생겼는지 궁금했습니다.

도움이 되었습니까?

해결책

>>> import ast
>>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
((8, 12.25), (13, 15), (16.75, 18.5))

다른 팁

def parse(s):
    tuples = s.split('), ')
    out = []
    for x in tuples:
        a,b = x.strip('()').split(', ')
        out.append((float(a),float(b)))
    return out

이것은 일을해야합니다.

나는 사용했다 SAFE_EVAL 과거에는 이와 같은 직업을 위해.

CSV 파일로 작업하고 오류를 처리하지 않는 "순진한"솔루션보다 더 많은 것을 원한다면 아마도 파이썬의 CSV 모듈.

다운로드 pyparsing.

나는 전에 그것과 함께 일했다. 당신은 그것으로부터 꽤 강력한 구문 분석 행동을 얻을 수 있으며, 나는 그것이 당신의 전체 구문 분석 요구를 이런 종류의 일로 처리 할 수있는 내장을 제공한다고 생각합니다. CommaseParatedList 및 NestedExpr을 찾으십시오.

체계적으로 수행하는 데 무엇이 문제입니까? ")" ", 나서 목록을 통과하고 모든 것을 제거하십시오"( ".

>>> s="(8, 12.25), (13, 15), (16.75, 18.5)"
>>> [ i.replace("(","") for i in s.split(")") ]
['8, 12.25', ', 13, 15', ', 16.75, 18.5', '']
>>> b = [ i.replace("(","") for i in s.split(")") ]
>>> for i in b:
...  print i.strip(", ").replace(" ","").split(",")
...
['8', '12.25']
['13', '15']
['16.75', '18.5']
['']

이제 각 요소를 데이터 구조로 가져올 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top