依赖于文件输入的 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':
有人可以向我解释为什么在下面的代码中消息 "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':