복붙노트

[PYTHON] 파이썬에서 문자열에서 부울로 변환 하시겠습니까?

PYTHON

파이썬에서 문자열에서 부울로 변환 하시겠습니까?

누구든지 파이썬에서 문자열에서 부울로 변환하는 방법을 알고 있습니까? 나는이 링크를 발견했다. 그러나 그것을하는 적절한 방법처럼 보이지 않습니다. 나는. 내장 된 기능 등을 사용하여

내가 이것을 묻는 이유는 여기에서 int ( "문자열")을 배웠기 때문입니다. 나는 bool ( "string")을 시도했지만 항상 True를 얻었습니다.

>>> bool("False")
True

해결법

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

    1.실제로, 문자열을 참을 표현할 것으로 기대하는 것과 비교하면 다음과 같이 할 수 있습니다.

    실제로, 문자열을 참을 표현할 것으로 기대하는 것과 비교하면 다음과 같이 할 수 있습니다.

    s == 'True'
    

    또는 전체 값에 대한 검사 :

    s in ['true', '1', 't', 'y', 'yes', 'yeah', 'yup', 'certainly', 'uh-huh']
    

    다음을 사용할 때는주의하십시오.

    >>> bool("foo")
    True
    >>> bool("")
    False
    

    빈 문자열은 False로 평가되지만 다른 모든 문자열은 True로 평가됩니다. 따라서 이것은 어떤 종류의 구문 분석 목적으로도 사용되어서는 안됩니다.

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

    2.

    def str2bool(v):
      return v.lower() in ("yes", "true", "t", "1")
    

    그런 다음 그렇게 부르십시오.

    str2bool("yes")
    

    > 참

    str2bool("no")
    

    > 거짓

    str2bool("stuff")
    

    > 거짓

    str2bool("1")
    

    > 참

    str2bool("0")
    

    > 거짓

    true 및 false를 명시 적으로 처리 :

    또한 함수를 True 목록의 단어와 False 단어 목록에 대해 명시 적으로 검사 할 수 있습니다. 그런 다음 목록에 없으면 예외가 발생할 수 있습니다.

  3. ==============================

    3.그냥 사용 :

    그냥 사용 :

    distutils.util.strtobool(some_string)
    

    http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#distutils.util.strtobool

  4. ==============================

    4.Python 2.6부터는 ast.literal_eval이 있습니다 :

    Python 2.6부터는 ast.literal_eval이 있습니다 :

    >>> import ast
    >>> help(ast.literal_eval)
    Help on function literal_eval in module ast:
    
    literal_eval(node_or_string)
        Safely evaluate an expression node or a string containing a Python
        expression.  The string or node provided may only consist of the following
        Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
        and None.
    

    문자열이 "True"또는 "False"가 될 것이라는 확신이있는 한 작동하는 것으로 보입니다.

    >>> ast.literal_eval("True")
    True
    >>> ast.literal_eval("False")
    False
    >>> ast.literal_eval("F")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 68, in literal_eval
        return _convert(node_or_string)
      File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 67, in _convert
        raise ValueError('malformed string')
    ValueError: malformed string
    >>> ast.literal_eval("'False'")
    'False'
    

    일반적으로 권장하지는 않지만 완전히 내장되어 있으며 요구 사항에 따라 올바른 작업이 될 수 있습니다.

  5. ==============================

    5.JSON 구문 분석기는 일반적으로 문자열을 합리적인 파이썬 유형으로 변환하는 데 유용합니다.

    JSON 구문 분석기는 일반적으로 문자열을 합리적인 파이썬 유형으로 변환하는 데 유용합니다.

    >>> import json
    >>> json.loads("false".lower())
    False
    >>> json.loads("True".lower())
    True
    
  6. ==============================

    6.이 버전은 int (value)와 같은 생성자의 의미를 유지하고 허용되는 문자열 값을 정의하는 쉬운 방법을 제공합니다.

    이 버전은 int (value)와 같은 생성자의 의미를 유지하고 허용되는 문자열 값을 정의하는 쉬운 방법을 제공합니다.

    def to_bool(value):
        valid = {'true': True, 't': True, '1': True,
                 'false': False, 'f': False, '0': False,
                 }   
    
        if isinstance(value, bool):
            return value
    
        if not isinstance(value, basestring):
            raise ValueError('invalid literal for boolean. Not a string.')
    
        lower_value = value.lower()
        if lower_value in valid:
            return valid[lower_value]
        else:
            raise ValueError('invalid literal for boolean: "%s"' % value)
    
    
    # Test cases
    assert to_bool('true'), '"true" is True' 
    assert to_bool('True'), '"True" is True' 
    assert to_bool('TRue'), '"TRue" is True' 
    assert to_bool('TRUE'), '"TRUE" is True' 
    assert to_bool('T'), '"T" is True' 
    assert to_bool('t'), '"t" is True' 
    assert to_bool('1'), '"1" is True' 
    assert to_bool(True), 'True is True' 
    assert to_bool(u'true'), 'unicode "true" is True'
    
    assert to_bool('false') is False, '"false" is False' 
    assert to_bool('False') is False, '"False" is False' 
    assert to_bool('FAlse') is False, '"FAlse" is False' 
    assert to_bool('FALSE') is False, '"FALSE" is False' 
    assert to_bool('F') is False, '"F" is False' 
    assert to_bool('f') is False, '"f" is False' 
    assert to_bool('0') is False, '"0" is False' 
    assert to_bool(False) is False, 'False is False'
    assert to_bool(u'false') is False, 'unicode "false" is False'
    
    # Expect ValueError to be raised for invalid parameter...
    try:
        to_bool('')
        to_bool(12)
        to_bool([])
        to_bool('yes')
        to_bool('FOObar')
    except ValueError, e:
        pass
    
  7. ==============================

    7.여기 제 버전이 있습니다. 양수 값 목록과 음수 값 목록을 모두 검사하여 알 수없는 값에 대한 예외를 발생시킵니다. 그리고 문자열을받지는 못하지만 어떤 유형이라도해야합니다.

    여기 제 버전이 있습니다. 양수 값 목록과 음수 값 목록을 모두 검사하여 알 수없는 값에 대한 예외를 발생시킵니다. 그리고 문자열을받지는 못하지만 어떤 유형이라도해야합니다.

    def to_bool(value):
        """
           Converts 'something' to boolean. Raises exception for invalid formats
               Possible True  values: 1, True, "1", "TRue", "yes", "y", "t"
               Possible False values: 0, False, None, [], {}, "", "0", "faLse", "no", "n", "f", 0.0, ...
        """
        if str(value).lower() in ("yes", "y", "true",  "t", "1"): return True
        if str(value).lower() in ("no",  "n", "false", "f", "0", "0.0", "", "none", "[]", "{}"): return False
        raise Exception('Invalid value for boolean conversion: ' + str(value))
    

    샘플 실행 :

    >>> to_bool(True)
    True
    >>> to_bool("tRUe")
    True
    >>> to_bool("1")
    True
    >>> to_bool(1)
    True
    >>> to_bool(2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 9, in to_bool
    Exception: Invalid value for boolean conversion: 2
    >>> to_bool([])
    False
    >>> to_bool({})
    False
    >>> to_bool(None)
    False
    >>> to_bool("Wasssaaaaa")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 9, in to_bool
    Exception: Invalid value for boolean conversion: Wasssaaaaa
    >>>
    
  8. ==============================

    8.너는 항상 뭔가를 할 수 있었다.

    너는 항상 뭔가를 할 수 있었다.

    myString = "false"
    val = (myString == "true")
    

    parens의 비트는 False로 평가됩니다. 이는 실제 함수 호출을 수행하지 않고도 수행 할 수있는 또 다른 방법입니다.

  9. ==============================

    9.나는 그들이 너무 관대하기 때문에 여기 어떤 해결책도 동의하지 않는다. 이것은 일반적으로 문자열을 파싱 할 때 원하는 것이 아닙니다.

    나는 그들이 너무 관대하기 때문에 여기 어떤 해결책도 동의하지 않는다. 이것은 일반적으로 문자열을 파싱 할 때 원하는 것이 아닙니다.

    그래서 여기에 내가 사용하고있는 솔루션 :

    def to_bool(bool_str):
        """Parse the string and return the boolean value encoded or raise an exception"""
        if isinstance(bool_str, basestring) and bool_str: 
            if bool_str.lower() in ['true', 't', '1']: return True
            elif bool_str.lower() in ['false', 'f', '0']: return False
    
        #if here we couldn't parse it
        raise ValueError("%s is no recognized as a boolean value" % bool_str)
    

    결과 :

    >>> [to_bool(v) for v in ['true','t','1','F','FALSE','0']]
    [True, True, True, False, False, False]
    >>> to_bool("")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 8, in to_bool
    ValueError: '' is no recognized as a boolean value
    

    내 대답이 어떻게 든 누군가를 해친 것처럼 보일 뿐이므로 분명히해야합니다.

    요점은 하나의 값만 테스트하고 다른 값은 가정하지 않는 것입니다. 나는 절대적으로 모든 것을 파싱되지 않은 값으로 맵핑하기를 항상 원한다고 생각하지 않는다. 이로 인해 오류가 발생하기 쉬운 코드가 생성됩니다.

    그래서, 당신이 원하는 코드를 알고 있다면 그것을 넣으십시오.

  10. ==============================

    10.간단히 내장 함수 eval ()을 사용할 수 있습니다 :

    간단히 내장 함수 eval ()을 사용할 수 있습니다 :

    a='True'
    if a is True:
        print 'a is True, a type is', type(a)
    else:
        print "a isn't True, a type is", type(a)
    b = eval(a)
    if b is True:
        print 'b is True, b type is', type(b)
    else:
        print "b isn't True, b type is", type(b)
    

    및 출력 :

    a isn't True, a type is <type 'str'>
    b is True, b type is <type 'bool'>
    
  11. ==============================

    11.시원하고 간단한 트릭 (@Alan Marchiori가 게시 한 것을 기반으로), yaml 사용 :

    시원하고 간단한 트릭 (@Alan Marchiori가 게시 한 것을 기반으로), yaml 사용 :

    import yaml
    
    parsed = yaml.load("true")
    print bool(parsed)
    

    너무 넓은 경우 유형 결과를 테스트하여 개선 할 수 있습니다. yaml이 반환 한 타입이 str 인 경우, 다른 타입으로 캐스팅 할 수 없으므로 (별다른 생각이 들지 않습니다.), 별도로 처리하거나 실제로 적용 할 수 있습니다.

    속도로 추측을하지는 않겠지 만 Qt gui에서 yaml 데이터로 작업하고 있기 때문에 좋은 대칭이 있습니다.

  12. ==============================

    12.아마도 이미 해결책을 가지고있을 것입니다 만, false, no 및 0 이외에 None, [], {} 및 ""을 포함하여 "표준"false 값을 사용하여 값을 부울 값으로 변환하는 방법을 찾고있는 다른 사람들을 위해 .

    아마도 이미 해결책을 가지고있을 것입니다 만, false, no 및 0 이외에 None, [], {} 및 ""을 포함하여 "표준"false 값을 사용하여 값을 부울 값으로 변환하는 방법을 찾고있는 다른 사람들을 위해 .

    def toBoolean( val ):
        """ 
        Get the boolean value of the provided input.
    
            If the value is a boolean return the value.
            Otherwise check to see if the value is in 
            ["false", "f", "no", "n", "none", "0", "[]", "{}", "" ]
            and returns True if value is not in the list
        """
    
        if val is True or val is False:
            return val
    
        falseItems = ["false", "f", "no", "n", "none", "0", "[]", "{}", "" ]
    
        return not str( val ).strip().lower() in falseItems
    
  13. ==============================

    13.dict (정말로, defaultdict)은이 트릭을 수행하는 아주 쉬운 방법을 제공합니다 :

    dict (정말로, defaultdict)은이 트릭을 수행하는 아주 쉬운 방법을 제공합니다 :

    from collections import defaultdict
    bool_mapping = defaultdict(bool) # Will give you False for non-found values
    for val in ['True', 'yes', ...]:
        bool_mapping[val] = True
    
    print(bool_mapping['True']) # True
    print(bool_mapping['kitten']) # False
    

    이 방법을 원하는 변환 동작에 맞게 쉽게 조정할 수 있습니다. 허용 된 Truthy 및 Falsy 값으로 채울 수 있으며 값을 찾을 수없는 경우 예외를 발생 시키거나 (None을 반환) 기본값을 True로 설정하거나, 기본값을 False로 설정하거나 원하는대로 지정하십시오.

  14. ==============================

    14.이것은 제가 작성한 버전입니다. 다른 여러 솔루션을 하나로 결합합니다.

    이것은 제가 작성한 버전입니다. 다른 여러 솔루션을 하나로 결합합니다.

    def to_bool(value):
        """
        Converts 'something' to boolean. Raises exception if it gets a string it doesn't handle.
        Case is ignored for strings. These string values are handled:
          True: 'True', "1", "TRue", "yes", "y", "t"
          False: "", "0", "faLse", "no", "n", "f"
        Non-string values are passed to bool.
        """
        if type(value) == type(''):
            if value.lower() in ("yes", "y", "true",  "t", "1"):
                return True
            if value.lower() in ("no",  "n", "false", "f", "0", ""):
                return False
            raise Exception('Invalid value for boolean conversion: ' + value)
        return bool(value)
    

    특정 값을 기대하는 문자열을 얻으면 그렇지 않으면 Exception을 발생시킵니다. 문자열을 얻지 못하면 그냥 bool 생성자가 알아낼 수 있습니다. 테스트 된 사례 :

    test_cases = [
        ('true', True),
        ('t', True),
        ('yes', True),
        ('y', True),
        ('1', True),
        ('false', False),
        ('f', False),
        ('no', False),
        ('n', False),
        ('0', False),
        ('', False),
        (1, True),
        (0, False),
        (1.0, True),
        (0.0, False),
        ([], False),
        ({}, False),
        ((), False),
        ([1], True),
        ({1:2}, True),
        ((1,), True),
        (None, False),
        (object(), True),
        ]
    
  15. ==============================

    15.3 행 연산자를 사용하는 것이 좋지만, 1 행 이상이면 안되는 느낌이 들기 때문에 좀 더 간결합니다.

    3 행 연산자를 사용하는 것이 좋지만, 1 행 이상이면 안되는 느낌이 들기 때문에 좀 더 간결합니다.

    True if myString=="True" else False
    
  16. ==============================

    16.bool에 캐스팅하는 일반적인 규칙은 몇 가지 특수 리터럴 (False, 0, 0.0, (), [], {})은 false이며 그 외 모든 것이 참이므로 다음을 권장합니다.

    bool에 캐스팅하는 일반적인 규칙은 몇 가지 특수 리터럴 (False, 0, 0.0, (), [], {})은 false이며 그 외 모든 것이 참이므로 다음을 권장합니다.

    def boolify(val):
        if (isinstance(val, basestring) and bool(val)):
            return not val in ('False', '0', '0.0')
        else:
            return bool(val)
    
  17. ==============================

    17.이 게시물은 오래된 게시물이지만, 일부 솔루션은 코드가 많이 필요합니다. 다음은 사용을 종료 한 코드입니다.

    이 게시물은 오래된 게시물이지만, 일부 솔루션은 코드가 많이 필요합니다. 다음은 사용을 종료 한 코드입니다.

    def str2bool(value):
        return {"True": True, "true": True}.get(value, False)
    
  18. ==============================

    18.입력 내용이 "참"또는 "거짓"인 경우 다음을 사용하지 않는 것이 좋습니다.

    입력 내용이 "참"또는 "거짓"인 경우 다음을 사용하지 않는 것이 좋습니다.

    def bool_convert(s):
        return s == "True"
    
  19. ==============================

    19.문자열이 "참"또는 "거짓"이라는 것을 알고 있으면 eval (s)을 사용할 수 있습니다.

    문자열이 "참"또는 "거짓"이라는 것을 알고 있으면 eval (s)을 사용할 수 있습니다.

    >>> eval("True")
    True
    >>> eval("False")
    False
    

    이 문자열은 문자열의 내용을 확실히 알고있는 경우에만 사용하십시오. 문자열에 유효한 파이썬이 포함되어 있지 않으면 예외가 발생하고 문자열에 포함 된 코드도 실행됩니다.

  20. ==============================

    20.여기에 털이 많은, 같은 대답을 많이 얻을 방법으로 지어졌습니다. 파이썬은 ""을 거짓으로 간주하고 다른 모든 문자열을 참이라고 생각하지만, TCL은 사물에 대해 매우 다른 생각을 가지고 있습니다.

    여기에 털이 많은, 같은 대답을 많이 얻을 방법으로 지어졌습니다. 파이썬은 ""을 거짓으로 간주하고 다른 모든 문자열을 참이라고 생각하지만, TCL은 사물에 대해 매우 다른 생각을 가지고 있습니다.

    >>> import Tkinter
    >>> tk = Tkinter.Tk()
    >>> var = Tkinter.BooleanVar(tk)
    >>> var.set("false")
    >>> var.get()
    False
    >>> var.set("1")
    >>> var.get()
    True
    >>> var.set("[exec 'rm -r /']")
    >>> var.get()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 324, in get
        return self._tk.getboolean(self._tk.globalgetvar(self._name))
    _tkinter.TclError: 0expected boolean value but got "[exec 'rm -r /']"
    >>> 
    

    이것에 대한 좋은 점은 당신이 사용할 수있는 가치에 대해 상당히 관대하다는 것입니다. 문자열을 값으로 바꾸는 것은 게으른 일이며, 받아들이고 거부하는 것에 대해 위대하다. (위의 문장이 tcl 프롬프트에서 주어지면 사용자의 하드 디스크를 지울 것이다.)

    나쁜 점은 Tkinter를 사용할 수 있어야한다는 것입니다. Tkinter는 일반적으로 사용되지만 일반적으로는 아니지만 더 중요하게는 비교적 무거운 Tk 인스턴스를 만들어야합니다.

    true 또는 false로 간주되는 것은 Tcl_GetBoolean의 동작에 따라 달라지며 0, false, no 및 off는 false이고 1, true, yes 및 on은 대소 문자를 구분하지 않습니다. 빈 문자열을 포함하여 다른 모든 문자열은 예외를 발생시킵니다.

  21. ==============================

    21.

    def str2bool(str):
      if isinstance(str, basestring) and str.lower() in ['0','false','no']:
        return False
      else:
        return bool(str)
    

    아이디어 : 문자열을 False로 평가할 것인지 확인하십시오. 그렇지 않으면 bool ()은 비어 있지 않은 문자열에 대해 True를 반환합니다.

  22. ==============================

    22.문자열의 진실성을 평가하기 위해 함께 던진 것입니다.

    문자열의 진실성을 평가하기 위해 함께 던진 것입니다.

    def as_bool(val):
     if val:
      try:
       if not int(val): val=False
      except: pass
      try:
       if val.lower()=="false": val=False
      except: pass
     return bool(val)
    

    eval보다 안전하지만 더 안전한 결과를 얻을 수 있습니다.

  23. ==============================

    23.나는 단지 이것을해야만했다. 파티에 늦을지라도 - 누군가가 유용하다고 느낄지도 모른다.

    나는 단지 이것을해야만했다. 파티에 늦을지라도 - 누군가가 유용하다고 느낄지도 모른다.

    def str_to_bool(input, default):
        """
        | Default | not_default_str | input   | result
        | T       |  "false"        | "true"  |  T
        | T       |  "false"        | "false" |  F
        | F       |  "true"         | "true"  |  T
        | F       |  "true"         | "false" |  F
    
        """
        if default:
            not_default_str = "false"
        else:
            not_default_str = "true"
    
        if input.lower() == not_default_str:
            return not default
        else:
            return default
    
  24. ==============================

    24.true / false를 반환하는 엔티티를 제어 할 수 있다면 true / false 대신 1/0을 반환하는 옵션이 있습니다.

    true / false를 반환하는 엔티티를 제어 할 수 있다면 true / false 대신 1/0을 반환하는 옵션이 있습니다.

    boolean_response = bool (int (응답))

    int 로의 추가 캐스트는 항상 문자열 인 네트워크의 응답을 처리합니다.

  25. ==============================

    25.파이썬의 내장 eval () 함수와 .capitalize () 메소드를 사용하면 "true"/ "false"문자열 (초기 대소 문자에 상관없이)을 진정한 파이썬 부울로 변환 할 수 있습니다.

    파이썬의 내장 eval () 함수와 .capitalize () 메소드를 사용하면 "true"/ "false"문자열 (초기 대소 문자에 상관없이)을 진정한 파이썬 부울로 변환 할 수 있습니다.

    예 :

    true_false = "trUE"
    type(true_false)
    
    # OUTPUT: <type 'str'>
    
    true_false = eval(true_false.capitalize())
    type(true_false)
    
    # OUTPUT: <type 'bool'>
    
  26. from https://stackoverflow.com/questions/715417/converting-from-a-string-to-boolean-in-python by cc-by-sa and MIT license