2014-02-13 67 views
4

我有一個名爲test.txt文件,該文件包含以下內容:字符串比較似乎不工作了行從文件中讀取

Line 1 
Line 2 
Line 3 
Line 4 

我有這樣簡單的Python程序:

f = open("test.txt") 

myline = "Line 3" 
for line in f: 
    print myline + " - " + line 
    if myline == line: 
     print "We have a match!" 

if myline == "Line 3": 
    print "This works." 

我得到了這個結果:

Line 3 - Line 1 

Line 3 - Line 2 

Line 3 - Line 3 

Line 3 - Line 4 

This works. 

爲什麼不「我們有一個匹配!」打印?

我錯過了什麼?

回答

5

爲什麼沒有 「我們有一場比賽!」打印?我錯過了什麼?

如果你會發現你越來越\n(新行)控制檯輸出一個,因爲print秒因爲在文件中的每一行的末尾有\n。您的文件看起來像:

Line 1 
Line 2 
Line 3 
Line 4 

基本上是:Line 1\nLine 2\nLine 3\nLine 4(假設你沒有任何多餘的空格如製表符,空格)。

在for循環:for line in f:line末char是\n(和line你認爲是'Line 3'實際上是'Line 3\n'),因此您的if條件失敗

要刪除那\n只需使用str.strip([chars]);函數。方法strip()返回字符串的一個副本,其中所有字符已從字符串的開始和結尾(默認空白字符)中剝離。

所以,用if myline == line.strip()代替if myline == line:這就是@ C.B.的答案。

+0

已知在相同情況下顯示爲「\ r \ n」的換行符。 – FallenAngel

+0

@FallenAngel是的,基本上取決於我認爲的操作系統。我有在Linux上的經驗,它總是'\ n'(如果我是正確的)我解釋這個答案,因爲很多時候當我是新的,我受這個錯誤。 –

5

Strip換行符:

for line in f: 
    print myline + " - " + line 
    if myline == line.strip(): 
     print "We have a match!"