2016-11-12 81 views
0

我有一個字符串可以從文件中讀取,有些情況下readline()會返回一個空行,我需要檢查下面的截圖,如果有人能向我解釋爲什麼它給出了一個錯誤的結果:爲什麼pycharm給出錯誤的條件檢查?

enter image description here

你可以從截圖中,行=「\ n」,爲什麼表達的評估結果爲假看?

確實有其他方法來檢查空白行,但我只是很好奇地想知道爲什麼我的腳本不工作。

謝謝。

謝謝。

+0

如果您需要使用空行測試,請使用'line =='「'not'line ==」\ n「'。換行符不是空白字符串。 –

回答

1

您的輸入文件很可能包含一些令人討厭的字符,如"zero width space""invisible separator"。您可以輸出這些如果您打印(或評價)repr(line)

with open('data.txt', 'w') as f: 
    f.write(u"\n") 
    f.write(u"\u200B\n") # zero width space 
    f.write(u"\u2063\n") # invisible separator 
    f.write(u"\n") 


with open('data.txt', 'r') as f: 
    for line in f: 
     print(repr(line)) 

如果調試以上,你就可以複製你的行爲對線2和3,而不是線1和4。注意,這些字符在大多數字體中都不可見(它們不佔用任何空間!),並且僅僅打印/顯示它們(就像在調試器中懸停一樣)將不會顯示它們甚至在那裏。

在PyCharm中的「評估表達式」對話框中,簡單評估「repr(line)」以查看真正的內容。

+0

謝謝。就像你說的,讀入的第一行確實包含一些不可見的字符:0d0a0d0a,實際上它是兩個空行 – PasLeChoix

0

'\n'不是空行。 ""是。所以你可以檢查if line == "":if not line:。如果你從文件中讀取python將從行中刪除\n。所以如果它是空的(只有新行字符),它將返回一個空字符串。

+0

沒用,實際上我是用'line ==「」',它只是返回錯誤的結果 – PasLeChoix

+0

@PasLeChoix然後給我們展示一些代碼請參考 –

+0

f = open('2014ips.txt') for line in f: if行==「」: 繼續 – PasLeChoix