这是我的代码:
for i, line in enumerate(searchlines):
b = 1.860572
if "%b" in line and "4.871899" in line and "1.995131" in line:
m.write("match" + "\n")
我想在我现在有 '%b' 的地方有 b 变量,所以它就像其他两个数字一样,但没有硬编码它。有人知道怎么做吗?我还在学习 Python。
请您参考如下方法:
if str(b) in line and "4.871899" in line and "1.995131" in line:
顺便说一句,在 for 循环中分配一个不会根据被迭代的对象而改变的循环是有点低效的。根据您的用例,这样做可能更有意义:
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")
或者
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")
或者
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")
还有一件事需要注意:将 float 转换为字符串并不总是为您提供与最初用于创建 float 相同的文字值。
>>> b = 1.9999999999999999
>>> s ="1.9999999999999999"
>>> str(b) in s
False
>>> str(b) in "abc2.0def"
True
>>> str(b)
'2.0'
这是因为 str 旨在返回一个可读的字符串,不一定能完美地代表对象的数据。对于 float ,这意味着 str() 可能四舍五入到比您最初指定的小数位数更少的位置。因此,如果您要在文件中搜索精确的数字序列,首先将 b 创建为字符串可能是有意义的,这样就不会损失精度。
