2012-09-05 39 views
0
fPath = raw_input('File Path:') 
counter = 0; 
flag = 0; 

with open(fPath) as f: 
    content = f.readlines() 

for line in content: 
    if flag == 0 and line.find("WECS number") or \ 
    line.find("WECS number") or \ 
    line.find("WECS name") or \ 
    line.find("Manufacturer") or \ 
    line.find("Type") or \ 
    line.find("Nominal effect") or \ 
    line.find("Hub height") or \ 
    line.find("x (local)") or \ 
    line.find("y (local)") or \ 
    line.find("x (global)") or \ 
    line.find("y (global)"): 

     if not line.find("y (global)"): 
      print ("Alert Last Line!"); 
     else: 
      print("Alert Line!"); 

出於某種原因,代碼似乎正在打印「Alert Line!」如果一行只是「\ n」。我創建「if and or」結構的意圖是忽略不包含line.find中列出的字符串的所有行。這裏出了點問題......Python文件I/O

我該如何解決這個問題?

+0

這可能是更適合的一種風格的提示codereview.stackexchange.com –

+2

:不是'含量= f.readlines();對於內容中的行:'只要做'爲f:'中的行。 –

回答

6

如果找不到子字符串,字符串的.find()方法將返回-1-1非零,因此被認爲是正確的。這可能不是你所期望的。

更Python的方式(因爲你不關心字符串的位置)是使用in操作:

if "WECS number" in line: # and so on 

您還可以使用startswith()endswith()酌情:

if line.startswith("WECS number"): 

最後,您可以簡單地使用圓括號來包圍整個布爾表達式,以避免所有反斜槓。如果括號是開放的,Python會繼續到下一行。如果字符串中沒有找到

if (condition1 or condition2 or 
    condition3 or condition4): 
+2

我可能會寫'phrase =('WECS number','WECS name')',然後'如果有的話(短語中的短語成句)'而不是鏈接所有'或'。如果真的需要'startswith',那就更好了:'line.startswith(phrase)'。 – DSM

+0

我必須相信第一個答案,因爲兩者都非常好,正確。非常感謝... – Giuseppe

+0

我喜歡這種語法。現在我明白了爲什麼我在堆棧溢出這麼多。 – Giuseppe

1

字符串find()方法返回-1。 -1在布爾上下文中計數爲true。所以你的if子句在你不認爲是的時候正在執行。你最好用if "blah" in line來測試子串是否存在。

1

str.find返回-1,如果沒有找到子串,和boolean(-1) == True,所以line.find("WECS number")總是當符合WECS號開始,在這種情況下line.find("WECS name")是真真正除外。

你想:

fPath = raw_input('File Path:') 

with open(fPath) as f: 
    for line in f: 
    if any(s in line for s in ("WECS number", "WECS name", "Manufacturer","Type", 
           "Nominal effect", "Hub height", "x (local)", 
           "y (local)", "x (global)", "y (global)",)): 

     if "y (global)" in line: 
      print("Alert Line!") 
     else: 
      print ("Alert Last Line!")