Pythonで文字の内容から真偽値の判定をする
Pythonで真偽値の判定をするとき、偽と定義されていないオブジェクトは真と判定されます。Falseという文字列も真になります。そこで、文字列の中身から真偽値を判定します。
目次
strtobool関数で真偽値を判定する
docutilsモジュールのstrtobool関数で、文字列から真偽のどちらが書かれているかを判定します。
from distutils.util import strtobool
res = strtobool(val)
変数 |
型 |
内容 |
---|---|---|
val |
真偽を判定するオブジェクト。 |
|
res |
int |
判定結果。真なら1、偽なら0。 |
公式のドキュメントによれば、y、yes、t、true、on、1は真で、n、no、f、false、off、0が偽と判定されるということです。判定できない文字列はエラーになります。
文字列の意味から真偽判定する実施例
試してみましょう。環境はPython 3.7です。
>>> from distutils.util import strtobool
>>> strtobool('True')
1
>>> strtobool('False')
0
>>> strtobool('true')
1
>>> strtobool('false')
0
>>> strtobool('TRUE')
1
>>> strtobool('FALSE')
0
>>> strtobool('T')
1
>>> strtobool('F')
0
>>> strtobool('t')
1
>>> strtobool('f')
0
>>> strtobool(True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 296, in strtobool
val = val.lower()
AttributeError: 'bool' object has no attribute 'lower'
>>> strtobool(False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 296, in strtobool
val = val.lower()
AttributeError: 'bool' object has no attribute 'lower'
大文字と小文字はあまり気にしなくても良いですね。
strでなくてbool型そのものを引数に入れると、エラーになります。。
>>> from distutils.util import strtobool
>>> strtobool('Yes')
1
>>> strtobool('No')
0
>>> strtobool('yes')
1
>>> strtobool('no')
0
>>> strtobool('Y')
1
>>> strtobool('N')
0
>>> strtobool('y')
1
>>> strtobool('n')
0
YesとNoも大文字と小文字は気にしなくても良さそうです。
>>> from distutils.util import strtobool
>>> strtobool('ON')
1
>>> strtobool('OFF')
0
>>> strtobool('On')
1
>>> strtobool('Off')
0
>>> strtobool('on')
1
>>> strtobool('off')
0
OnとOffも大文字と小文字は気にしなくても良さそうです。
>>> from distutils.util import strtobool
>>> strtobool(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 296, in strtobool
val = val.lower()
AttributeError: 'int' object has no attribute 'lower'
>>> strtobool(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 296, in strtobool
val = val.lower()
AttributeError: 'int' object has no attribute 'lower'
>>> strtobool('1')
1
>>> strtobool('0')
0
>>> strtobool('1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 302, in strtobool
raise ValueError("invalid truth value %r" % (val,))
ValueError: invalid truth value '1'
>>> strtobool('0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 302, in strtobool
raise ValueError("invalid truth value %r" % (val,))
ValueError: invalid truth value '0'
>>> strtobool('-1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\distutils\util.py", line 302, in strtobool
raise ValueError("invalid truth value %r" % (val,))
ValueError: invalid truth value '-1'
1と0ですが、intの1と0ではエラーになります。というか、わざわざstrtoboolを通す必要がありませんね。
日本語として入力できる1と0もエラーになります。
'-1'もエラーですね。
公開日
広告
Pythonカテゴリの投稿
- PythonからWindows RuntimeのAPIを使ってみる
- Pythonから外部のアプリケーションを実行する
- PythonでApacheのログを読む
- PythonでURLを結合する
- PythonでURLを解析する
- Pythonでtar.gzなファイルを解凍(展開)する
- Pythonでwavファイルを書き出す
- Pythonでwavファイルを読み込む
- Pythonでデータを整形して出力する
- Pythonでハミング窓関数を作る(SciPy編)
- Pythonでブール値を数値に変換する
- Pythonでモジュールをインポートする
- Pythonで数値を比較する
- Pythonで文字の内容から真偽値の判定をする
- Pythonで自前の関数を定義する
- Pythonで論理演算する
- Pythonのprint関数で改行せずに出力する
- Pythonのプログラムを終了する
- Pythonの関数には参照を渡す
- Windows10 バージョン1703 Creators Update にPythonとSphinxをインストール
- Windwos10 バージョン1703 Creators Update にPythonとSphinxをインストール (Anaconda編)
- reStructuredTextの表
- ダウンロードしたファイルのチェックサムをPythonで確認してみた
- 反復処理 (while)
- 反復処理(for)
- 条件分岐
- 自作のモジュールをインポートする