복붙노트

[PYTHON] 문자열에서 터플을 파싱 하시겠습니까?

PYTHON

문자열에서 터플을 파싱 하시겠습니까?

예를 들어 "(1,2,3,4,5)"와 같이 하나의 튜플 형식이어야하는 문자열이 있다고 가정 해보십시오. 이것을 실제 튜플로 변환하는 가장 쉬운 방법은 무엇입니까? 내가하고 싶은 일의 예가 있습니다 :

tup_string = "(1,2,3,4,5)"
tup = make_tuple(tup_string)

문자열에 대해 tuple ()을 실행하면 모든 것을 하나의 큰 튜플로 만든다. 반면에 내가하고 싶은 것은 튜플로 문자열을 이해하는 것이다. 나는 이것을 위해 정규 표현식을 사용할 수 있다는 것을 알고 있지만, 비용이 적게 드는 방법이 있기를 바랬다. 아이디어?

해결법

  1. ==============================

    1.그것은 이미 존재합니다!

    그것은 이미 존재합니다!

    >>> from ast import literal_eval as make_tuple
    >>> make_tuple("(1,2,3,4,5)")
    (1, 2, 3, 4, 5)
    

    그래도 코너 케이스에 유의하십시오.

    >>> make_tuple("(1)")
    1
    >>> make_tuple("(1,)")
    (1,)
    

    입력 형식이 파이썬과 다른 경우 여기서는 별도로 처리하거나 tup_string [1 : -1] .split ( ','))에서 x에 대해 tuple (int (x))과 같은 다른 메서드를 사용해야합니다.

  2. ==============================

    2.SyntaxError없이 문자열을 파싱 할 수 있습니다.

    SyntaxError없이 문자열을 파싱 할 수 있습니다.

    def parse_tuple(string):
        try:
            s = eval(string)
            if type(s) == tuple:
                return s
            return
        except:
            return
    

    이 함수는 구문 분석이 성공하면 Tuple을 반환합니다. 그렇지 않으면 없음을 반환합니다.

    print parse_tuple("('A', 'B', 'C')")
    
  3. ==============================

    3.literal_eval을 사용하는 것이 좋습니다.

    literal_eval을 사용하는 것이 좋습니다.

    literal_eval에 익숙하지 않거나 변환 대상을 더 많이 제어하고 싶다면 문자열을 해체하고 값을 변환 한 다음 튜플을 다시 만들 수도 있습니다.

    실제보다 더 복잡하게 들리지만 실제로는 한 줄짜리입니다.

    eg = '(102,117,108)'
    eg_tuple = map(int, eg.replace('(','').replace(')','').split(',')))
    

    튜플의 요소 (string)가 int로 변환 할 수없는 경우 ValueError가 throw됩니다. 예를 들어 '(1.2, 3, 4)'문자열의 '1.2'와 같이

    regex를 사용하여 동일한 결과를 얻을 수 있습니다.

    import re
    eg = '(102,117,108)'
    et_tuple = tuple(map(int, re.findall(r'[0-9]+', eg)))
    
  4. ==============================

    4.우리는 또한 스스로 해결할 수 있습니다. 튜플이 아래와 같이 파이썬에 의해 반환되었다고 가정 해 봅시다 :

    우리는 또한 스스로 해결할 수 있습니다. 튜플이 아래와 같이 파이썬에 의해 반환되었다고 가정 해 봅시다 :

    ((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相关', 0, 'python'))
    

    우리가하는 방법은 다음과 같습니다.

    먼저, 튜플 문자열의 문자를 계속 읽지 만 마지막 세미콜론의 위치와 세미콜론의 수를 저장합니다 (세미콜론 수준에서 세미콜론으로 지정할 수 있음). 올바른 세미콜론을 만날 때마다 아래의 것들 :

    JavaScript 코드는 아래와 같습니다.

    함수 parseTuple (t) {     var lc = "(";     var rc = ")";     var lc_level = 0;     var rc_level = 0;     var last_lc = 0;     var last_rc = 0;     var result = [];     for (i = 0; i

  5. from https://stackoverflow.com/questions/9763116/parse-a-tuple-from-a-string by cc-by-sa and MIT license