依赖于文件输入的 If 子句似乎不起作用

If clause dependent on file input doesn't seems to work

有人可以向我解释为什么在下面的代码中消息 "Found an instance without object" 没有随输出一起打印吗?

filename= "S1-ADL1.dat"

with open(filename, 'r')as data:
 for line in data:            
    valueList=line.split(' ')   
    print "valueList[247]"+valueList[247]
    print "valueList[249]"+valueList[249]        
    if valueList[247] == '0'  and valueList[249] == '0':
            print "Found an instance without object"
            continue
    elif valueList[247]==0 and valueList[249]!=0:
        valueList[247]=valueList[249]
        valueList[246]=valueList[248]                        
print filename+' is written'

我得到的输出结果如下

valueList[247]0
valueList[249]0

valueList[247]0
valueList[249]0

valueList[247]0
valueList[249]0

S1-ADL1.dat is written

如您所见,在某些情况下满足 if 语句但不会在 if 子句中打印消息。

这是因为最后一个拆分结果中隐藏了换行符。在您正在阅读的每个 line 中,您都有这样的内容:'x y ... z\n',因此 split 的最后结果包含 'z\n'(例如 "0\n")。或者它恰好是 '\r' 字符,或其他一些空白字符。

尝试使用 strip:

valueList = line.strip().split(' ')

如果您输入的部分之间可能有多个其他空白字符,您可以尝试:

valueList = [v.strip() for v in line.split(' ')]

从每个片段中单独删除它们。

另外,你的第二个条件是错误的。如果您不将片段转换为 int,则应使用字符串:

elif valueList[247]=='0' and valueList[249]!='0':      # note the apostrophes

同意 BartoszKP。

split(' ') 方法之前使用 strip() 方法。

可以在您的代码中打印 valueList 并检查 print "valueList:-" valueList 输入的列表吗?这样你就更清楚了。

我测试了一些示例测试用例:

valueList:- ['q', '0', '0', '\n']
valueList[247]0
valueList[249]0
Found an instance without object
valueList:- ['q', '0', '0\n']
valueList[247]0
valueList[249]0

或者你可以这样写if condition

if valueList[247][0] == '0' and valueList[249][0] == '0':