在python中检查多个条件

时间:2019-08-15 15:14:28

标签: if-statement python-3.6

我有一个文本文件,在该文件的某些地方,有一行包含以下内容

xxxx xxxx y = 4.63456

其中xxxx代表该行不感兴趣的部分。我的目标是提取y = 4.63456值并将其写入新的文本文件。这是我到目前为止所拥有的。

import os
import re


my_absolute_path = os.path.abspath(os.path.dirname(__file__))

with open('testfile', 'r') as helloFile, open('newfile32','a') as out_file:

 for line in helloFile:

     numbertocheck= []

     if 'x' in line and ' = ' in line and numbertocheck==type(float) in line:

        out_file.write(line)

代码创建文件,但是文件为空。这是检查if语句中条件的正确方法吗? FWIW,如果我在最后删除了两个条件并写了if x in line:,则代码可以正常工作,但会打印出整行。

1 个答案:

答案 0 :(得分:0)

numbertocheck==type(float)可能是您的罪魁祸首。当到达代码中的那一点时,numbertocheck是一个列表,因此它永远不会是float类型。您可以通过运行type(numbertocheck)进行检查。

不清楚您要对空列表numbertocheck做什么,以及为什么需要使其浮空。如果您提供更多信息,我们可能会更好地指导您。

根据评论进行编辑:

让我们假设您对numbertocheck的期望是检查4.63456中的xxxx xxxx y = 4.63456值是否为有效浮点数。

您需要从line字符串中提取浮点值。正则表达式适用于此,但是确切的答案取决于您对给定行中可能的值的了解或不了解。

如果您确定数字始终带有小数点,

import re
numbertocheck = re.findall("\d+\.\d+", line)

将提取“浮动”值。如果不能保证小数点,请改用re.findall(r"[-+]?\d*\.\d+|\d+", line)

如果您的行中存在多个数字,则可能会返回多个数字。如果line中的其他地方(例如xxxx xxxx部分)可能有数字,并且如果您只关心行尾的数字,那么这可能有用。 / p>

for line in helloFile:

    numbers_in_line = re.findall(r"[-+]?\d*\.\d+|\d+", line)

    # Make sure a number was found
    if len(numbers_in_line) == 0:
        continue
    else:
        try:
            last_num = float(numbers_in_line[-1])
        except ValueError:
            continue
    # By this point, you've confirmed if a number was found and if it's a float

    if 'x' in line and ' = ' in line:
        out_file.write(line)

请注意,这将允许不带小数点的数字计为有效数字;您可以根据需要进行修改。