2015-01-13 48 views
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子句中打印信息。

+0

你可以給樣品輸入的內容? –

+1

嘗試'print'valueList [247]「+ repr(valueList [247])' - 你可能看不到空白。 – jonrsharpe

+0

嘗試valueList [249] .strip()可能會有所幫助。 –

回答

2

這是因爲在最後的分割結果中隱藏了換行符。在您看到的每個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 
+0

是的,第二個條件無效。總是返回False –

0

與BartoszKP同意。

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

是否可以在您的代碼中打印valueList並通過print "valueList:-" valueList檢查List輸入?所以這對你更清楚。

我一些樣品測試案例進行測試:

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':