1. ホーム
  2. python

[解決済み] ファイルから読み込んだ真偽値をブーリアンに変換する

2023-02-14 13:16:33

質問

を読んでいます。 True - False の値を読み込んでいますが、これをブール値に変換する必要があります。現在、それは常に True に設定されていても False .

ここでは MWE のようなものです。

with open('file.dat', mode="r") as f:
    for line in f:
        reader = line.split()
        # Convert to boolean <-- Not working?
        flag = bool(reader[0])

if flag:
    print 'flag == True'
else:
    print 'flag == False'

file.dat ファイルは基本的に一つの文字列で構成され、その値は True または False の中に書かれています。この配置は非常に複雑に見えますが、これははるかに大きなコードからの最小限の例であり、このように私はパラメータを読み込んでいます。

なぜ flag に変換されるのでしょうか? True ?

どのように解決するのですか?

bool('True') そして bool('False') は常に True というのは、文字列 'True' と 'False' は空ではないからです。

偉大な人物の言葉を引用すると(Pythonも ドキュメント ):

<ブロッククオート

5.1. 真理値テスト

どのようなオブジェクトも真理値テストが可能で、ifやwhileの条件やオペランドとして使用することができます。 条件や、以下のブール演算のオペランドとして使用するためです。以下の値は 以下の値は偽とみなされます。

  • ...
  • 任意の数値型のゼロ、例えば 0 , 0L , 0.0 , 0j .
  • 任意の空のシーケンス、例えば '' , () , [] .
  • ...

それ以外の値はすべて真とみなされます - したがって、多くの型のオブジェクト は常に真となります。

組み込みの bool 関数は、標準的な真偽判定手順を用いています。そのため、常に True .

文字列をbooleanに変換するには、次のようにする必要があります。

def str_to_bool(s):
    if s == 'True':
         return True
    elif s == 'False':
         return False
    else:
         raise ValueError # evil ValueError that doesn't tell you what the wrong value was