Konvertieren von True / False-Wert von Datei zu boolean lesen

Ich lese einen True - False Wert aus einer Datei und ich muss ihn in Boolesche umwandeln. Derzeit wird es immer wieder in True auch wenn der Wert auf False .

Hier ist ein MWE von dem, was ich versuche zu tun:

 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' 

Die Datei file.dat besteht grundsätzlich aus einer einzelnen Zeichenfolge mit dem Wert True oder False . Die Anordnung sieht sehr gewunden aus, denn das ist ein minimales Beispiel aus einem viel größeren Code und das ist, wie ich Parameter in sie lese.

Warum ist die flag immer in True ?

8 Solutions collect form web for “Konvertieren von True / False-Wert von Datei zu boolean lesen”

bool('True') und bool('False') immer True da Strings 'True' und 'False' nicht leer sind.

Um einen großen Mann (und Python Dokumentation ) zu zitieren:

5.1. Wahrheitsprüfung

Jedes Objekt kann auf Wahrheitswert getestet werden, für die Verwendung in einer if oder while-Bedingung oder als Operand der Booleschen Operationen unten. Die folgenden Werte gelten als falsch:

  • Null eines beliebigen numerischen Typs, z. B. 0 , 0L , 0.0 , 0j .
  • Jede leere Sequenz, zum Beispiel, '' , () , [] .

Alle anderen Werte gelten als wahr – also sind Objekte von vielen Typen immer wahr.

Die eingebaute bool Funktion verwendet das Standard-Wahrheitstestverfahren. Deshalb bist du immer True .

Um einen String in Boolean zu konvertieren, musst du so etwas machen:

 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 

Verwenden Sie ast.literal_eval :

 >>> import ast >>> ast.literal_eval('True') True >>> ast.literal_eval('False') False 

Warum ist die Flagge immer in True umgewandelt?

Nicht-leere Zeichenfolgen sind immer wahr in Python.

Verwandte: Truth Value Testing


Wenn NumPy eine Option ist, dann:

 >>> import StringIO >>> import numpy as np >>> s = 'True - False - True' >>> c = StringIO.StringIO(s) >>> np.genfromtxt(c, delimiter='-', autostrip=True, dtype=None) #or dtype=bool array([ True, False, True], dtype=bool) 

Du kannst distutils.util.strtobool benutzen

 >>> from distutils.util import strtobool >>> strtobool('True') 1 >>> strtobool('False') 0 

True Werte sind y , yes , t , true , on und 1 ; False Werte sind n , no , f , false , off und 0 . Hebt ValueError wenn val etwas anderes ist.

Ich bin nicht vorgeschlagen, dies als die beste Antwort, nur eine Alternative, aber Sie können auch so etwas wie:

 flag = reader[0] == "True" 

Fahne wird True ID Leser [0] ist "True", sonst wird es False .

Sie können dict verwenden, um Zeichenfolge zu boolean zu konvertieren. Ändern Sie diese Zeile flag = bool(reader[0]) an:

 flag = {'True': True, 'False': False}.get(reader[0], False) # default is False 

Die sauberste Lösung, die ich gesehen habe, ist:

 from distutils.util import strtobool def string_to_bool(string): return bool(strtobool(str(string))) 

Sicher, es erfordert einen Import, aber es hat eine ordnungsgemäße Fehlerbehandlung und erfordert sehr wenig Code geschrieben (und getestet).

Derzeit wird es auf True ausgewertet, da die Variable einen Wert hat. Es gibt ein gutes Beispiel hier, was passiert, wenn Sie beliebige Typen als Booleschen auswerten.

Kurz gesagt, was Sie tun möchten, ist, die 'True' oder 'False' String zu isolieren und eval auf sie auszuführen.

 >>> eval('True') True >>> eval('False') False 

Pip install str2bool

 >>> from str2bool import str2bool >>> str2bool('Yes') True >>> str2bool('FaLsE') False 
  • Wie man die Anzahl der Vorkommen von jedem Charakter mit Python bekommt
  • Spezielle nationale Zeichen werden in Python nicht .plit ()
  • Überprüfen, ob ein String in Python konvertiert werden kann
  • Nicht finden die Saiten erwartet mit pyparsing
  • Umwandlung von Unicode-String in Python
  • Wie überprüfe ich, ob ein String nur alphanumerische Zeichen und Bindestriche enthält?
  • Python-String-Formatierung mit Prozentzeichen
  • Entfernen von nachlaufenden Nullen in Python
  • Legen Sie einen String in den angegebenen String bei gegebenem Index in Python ein
  • Auszug aus einer Zeichenfolge in Python
  • Wie entnehme ich eine Liste von Elementen, die in Anführungszeichen eingehüllt sind, die von <> begrenzt und durch Kommas - Python, Regex begrenzt sind?
  • Python ist die beste Programmiersprache der Welt.