文字列からbool値に変換する

文字列からbool値に変換するのは、一見bool()関数でできそうですが、これは真偽値判断をしてくれる関数であって、空文字列がFalse。それ以外がTrueになってしまいます。

単純に文字列→boolとなる関数は標準ライブラリには用意されていないようです。

実際に変換したいのはいろいろな文字列→bool値の仕様があると思いますが、以下のような仕様での実装例を考えてみます。

文字列からboolへの変換の例

文字列 bool値
TRUE True
true True
T True
yes True
1 True
それ以外 False

Trueとなる文字列を列挙してマッチするかどうか

def str2bool(s):
     return s.lower() in ["true", "t", "yes", "1"]

# 確認コード
for s in ["TRUE", "FALSE", "true", "false", 
        "T", "F", "yes", "no", "1", "0"]:
    print(s, str2bool(s))

True対象でなければFalseとなるので、これで文字列からboolへの変換が実装できます。

distutils.util.strtoboolを使用

標準ライブラリにはないと書きましたが、別の用途で使用するモジュールにひっそり似たようなものがあります。
これを使用するのも楽です。

from distutils.util import strtobool

# 確認コード
for s in ["TRUE", "FALSE", "true", "false",
         "T", "F", "yes", "no", "1", "0"]:
    print(s, " ==> ", strtobool(s)) 
        # Trueのとき1, Falseのとき0を返す

1と0の数値で返却されますが、数値の真偽値判別では0はFalse, 0以外はTrueとなるので問題ありません。先ほど挙げた変換例ともマッチするようです。

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)