2015-06-02 73 views
-8

那麼程序應該檢查它是否在電子郵件旁邊看到「ok」,並且它是否在另一個txt文件中吐出了電子郵件。爲什麼這個基本的python程序不工作?

輸入txt文件:

[email protected],ok 
[email protected],fail 
[email protected],fail 
[email protected],fail 
[email protected],ok 
[email protected],fail 
[email protected],fail 
[email protected],ok 

Python代碼是:

readEmails = open("C:\\Users\\Greg\\Desktop\\rewriteEmails.txt","r") 
writeEmails = open("C:\\Users\\Greg\\Desktop\\OutputEmails.txt","w") 

for line in readEmails: 
    subbed = line[-3:] 
    if subbed == "ok": 
     split = line.split(",") 
     writeEmails.write(split[0]) 
     print("Email Added") 
    else: 
     print("Error") 

程序似乎總是去if語句的其他部分。我有點放屁;我會愛你的建議。

+4

你有沒有做過任何基本的調試?如果它似乎繼續觸及else條件,則意味着'subbed'不是'=='到「ok」,那麼'line [-3:]'返回什麼? –

+1

行最後還包含換行符。 –

+4

如果只有一些方法**去掉**那些關閉... – IanAuld

回答

1

你的問題是此行

subbed = line[-3:] 

這將返回以下:

ok\n 

il\n 

因此,您if語句檢查是否subbed == 'ok'每次都會失敗。

您可以只取最後兩個字符,剝離後的換行解決這個問題:

subbed = line.strip()[-2:] 

我原來的答覆並沒有解釋從文件讀取。該答案假設結果將是,okail。從文件讀取時,這不是正確的答案。上面的答案已被修改,以顯示將返回的內容並適當調整解決方案。

+1

'line [-3:]''實際上會返回''ok \ n「'或者除了最後一行之外,還有'il \ n'。 –

+0

對於最後一行,這可能仍然會失敗,但先剝離然後再分兩次即可。 –

+0

您正確@AshwiniChaudhary。我調整了strip()的出現位置。 – Andy

5

此行:subbed = line[-3:]會給你最後3個字符line,它永遠不會是'好',這是2個字符。

1

簡單地說就是一個「OK」行的最後三個字符是「OK」:

>>> line = "[email protected],ok" 
>>> line[-3:] 
',ok' 

編輯 以前行結束一個新行,所以我們得到的換行符包括代替逗號:

>>> line = """[email protected],ok 
... """ 
>>> line[-3:] 
'ok\n' 

編輯結束

也許你應該剛剛過去的兩個字符比較:

for line in readEmails: 
    subbed = line[-2:] 
    #as you were 

對於一個真正的錯誤情況下,它往往是報告錯誤,那麼你可以告訴什麼容易的了。而不是僅僅說

else: 
    print("Error") 

,你可以打印出subbed變過了,問題出在哪裏放置它可能已經成爲顯而易見的。

+0

http://stackoverflow.com/questions/30600701/why-is-this-basic-python-program-not-working#comment49270188_30600778 –

2

而不是依賴於字符串長度的(你有3個而不是2),你可以做到這一點line.strip().endswith('ok')

+2

WontWork。你想'line.strip()。endswith(「ok」)'擺脫新行... –

+0

這使得代碼的意圖更清晰。好建議。 – wonderb0lt

1

你可以用正則表達式解決您的問題。這裏是你的代碼的例子。

import re 

for line in readEmails: 
    subbed = re.match("(?:.*),(\\w+)", line) 
    print(subbed.group(1)) 
    if subbed.group(1) == "ok": 
     writeEmails.write(subbed.group(1)) 
     print("Email Added") 
    else: 
     print("Error") 
+0

@AshwiniChaudhary 正則表達式更好一切。 加上,在未來它會很容易改變結束從「好」到其他 –

+0

正則表達式是不必要的這個微不足道的情況下,我會去:'line.rstrip()。endswith(「ok」)'。 –

相關問題