파이썬에서 문자열을 부울로 변환하는 방법을 아는 사람이 있습니까? 이 링크를 찾았습니다 . 그러나 그것을하는 적절한 방법처럼 보이지는 않습니다. 즉 내장 기능 등을 사용하는 경우
내가 묻는 이유 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))
- 파이썬 2 : http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#distutils.util.strtobool
- 파이썬 3 : https://docs.python.org/3/distutils/apiref.html#distutils.util.strtobool
참값은 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