2017-06-02 82 views

回答

6

wc -l在輸入中打印number of newlines。換句話說,它在「行數」中的「行」定義要求行以換行符結束,實際上是defined by POSIX

如果文件中的最後一行不以換行符結尾,則此行的定義可能會產生令人驚訝的行爲。儘管這樣的行在文本編輯器和傳呼機中顯示得很好,但wc不會將其計爲一行。例如:

$ printf 'foo\nbar\n' | wc -l 
2 
$ printf 'foo\nbar' | wc -l 
1 

Python的readlines()方法,在另一方面,被設計爲在該文件中提供的數據,以便它可以被完美地重建。因此,它爲每行提供最後一個換行符,並且最後一個非空行按原樣(帶或不帶最後的換行符)。對於上面的例子,它分別返回列表["foo\n", "bar\n"]["foo\n", "bar"],長度爲二兩:

$ printf 'foo\nbar' | python -c 'import sys; print len(sys.stdin.readlines())' 
2 
$ printf 'foo\nbar\n' | python -c 'import sys; print len(sys.stdin.readlines())' 
2 
+0

你給我一個合理的解釋,但我有一個大的文件,數百萬行的,從「WC的不同結果 - f「和」len(readlines())「,但是,我通過一個腳本檢查這個文件,每行只在行尾包含一個'\ n',所以我想必須有另一個原因,你有還有什麼想法? –

+0

或者我應該問一下,有沒有辦法在python中將這樣的行像「aaa \ nbbb」那樣視爲一行? –

+0

@AndyYuan對不起,我不知道'wc -f'是幹什麼的。另外,如果文件太大,可能是在'wc'運行時寫入的,這可以解釋不同之處。 – user4815162342