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

파이썬에서 문자열을 부울로 변환하는 방법을 아는 사람이 있습니까? 이 링크를 찾았습니다 . 그러나 그것을하는 적절한 방법처럼 보이지는 않습니다. 즉 내장 기능 등을 사용하는 경우

내가 묻는 이유 int("string")는 여기에서 배웠기 때문 입니다. 그러나 시도 bool("string")하면 항상 다음을 반환합니다 True.

>>> bool("False")
True



답변

실제로 문자열을 true를 나타내는 것으로 받아 들일 것으로 예상되는 것과 비교하면 다음과 같이 할 수 있습니다.

s == 'True'

또는 전체 값에 대해 확인하려면 다음을 수행하십시오.

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

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

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

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


답변

사용하다:

bool(distutils.util.strtobool(some_string))

참값은 y, yes, t, true, on 및 1입니다. false 값은 n, no, f, false, off 및 0입니다. val이 다른 경우 ValueError가 발생합니다.

distutils.util.strtobool()정수 표현 을 리턴하므로 bool()부울 값을 얻기 위해 랩핑되어야 합니다.


답변

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

그런 다음 이렇게 호출하십시오.

>>> str2bool("yes")
True
>>> str2bool("no")
False
>>> str2bool("stuff")
False
>>> str2bool("1")
True
>>> str2bool("0")
False

참과 거짓을 명시 적으로 다루기 :

함수가 참 단어 목록과 거짓 단어 목록을 명시 적으로 검사하도록 할 수도 있습니다. 그런 다음 목록에 없으면 예외를 던질 수 있습니다.


답변

JSON 파서는 또한 일반적으로 문자열을 합리적인 파이썬 유형으로 변환하는 데 유용합니다.

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


답변

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

>>> 수입 ast
>>> help (ast.literal_eval)
ast 모듈의 literal_eval 함수에 대한 도움말 :

literal_eval (노드 _ 또는 _ 문자열)
    표현식 노드 또는 파이썬을 포함하는 문자열을 안전하게 평가
    표현. 제공된 문자열 또는 노드는 다음으로 만 구성 될 수 있습니다
    파이썬 리터럴 구조 : 문자열, 숫자, 튜플,리스트, dicts, booleans,
    그리고 없음.

문자열이 또는 중 하나 일 것이라고 확신 하는 한 작동하는 것 같습니다 ."True""False"

>>> ast.literal_eval ( "참")
진실
>>> ast.literal_eval ( "거짓")
그릇된
>>> ast.literal_eval ( "F")
역 추적 (가장 최근 통화) :
  ""파일, 1 행
  literal_eval의 "/opt/Python-2.6.1/lib/python2.6/ast.py", 68 행 파일
    리턴 _convert (node_or_string)
  _convert의 파일 "/opt/Python-2.6.1/lib/python2.6/ast.py", 67 행
    ValueError ( '잘못된 문자열')
ValueError : 잘못된 문자열
>>> ast.literal_eval ( " '거짓'")
'그릇된'

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


답변

문자열이 "True"또는 중 하나 인 것을 알고 있으면 "False"사용할 수 있습니다 eval(s).

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

문자열에 유효한 Python이 포함되어 있지 않으면 예외가 발생하고 문자열에 포함 된 코드도 실행되므로 문자열의 내용이 확실하면 이것을 사용하십시오.


답변

이 버전은 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