if str(b) in line and "4.871899" in line and "1.995131" in line:
Nebenbei bemerkt ist es leicht ineffizient einen Auftrag in einem for
Schleife zu haben, ändert sich nicht auf das, was über iteriert wird. Je nach Anwendungsfall kann es mehr Sinn zu tun machen:
b = 1.860572
for i, line in enumerate(searchlines):
if str(b) in line and "4.871899" in line and "1.995131" in line:
m.write("match" + "\n")
Oder
b = "1.860572"
for i, line in enumerate(searchlines):
if b in line and "4.871899" in line and "1.995131" in line:
m.write("match" + "\n")
Oder
b = 1.860572
b_s = str(b)
for i, line in enumerate(searchlines):
if b_s in line and "4.871899" in line and "1.995131" in line:
m.write("match" + "\n")
Eine weitere Sache zu achten gilt: Umwandlung eines Float zu einem String gibt nicht immer den gleichen literalen Wert, den Sie zum Erstellen des Floats an erster Stelle verwendet haben.
>>> b = 1.9999999999999999
>>> s ="1.9999999999999999"
>>> str(b) in s
False
>>> str(b) in "abc2.0def"
True
>>> str(b)
'2.0'
Dies liegt daran, str
ausgelegt ist eine lesbare Zeichenfolge zurück, die nicht unbedingt etwas vollkommen repräsentativ für die Daten des Objekts. Für Floats bedeutet das, str()
könnte auf weniger Dezimalstellen runden als ursprünglich angegeben. Wenn Sie also eine Datei nach einer genauen Ziffernfolge durchsuchen, kann es sinnvoll sein, zuerst b
als Zeichenkette zu erstellen, damit die Präzision nicht verloren geht.
Was meinst du mit 'hard coding it'? –
@ GáborErdős: Er meint, ohne tatsächlich "wenn" 1.860572 "in Zeile ..." – zondo