繁体   English   中英

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

[英]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 ,您都有类似以下内容: 'xy ... 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() split(' ')方法。

可以在代码中打印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':

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM