0
對於一些大的文件,Python的len(readlines)爲什麼不等於Bash的'wc -l'命令?
lines_a = len(fa.readlines())
print(lines_a)
而對擊(在Mac上):
wc -l
的結果是不同的!
可能的原因是什麼?
對於一些大的文件,Python的len(readlines)爲什麼不等於Bash的'wc -l'命令?
lines_a = len(fa.readlines())
print(lines_a)
而對擊(在Mac上):
wc -l
的結果是不同的!
可能的原因是什麼?
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
你給我一個合理的解釋,但我有一個大的文件,數百萬行的,從「WC的不同結果 - f「和」len(readlines())「,但是,我通過一個腳本檢查這個文件,每行只在行尾包含一個'\ n',所以我想必須有另一個原因,你有還有什麼想法? –
或者我應該問一下,有沒有辦法在python中將這樣的行像「aaa \ nbbb」那樣視爲一行? –
@AndyYuan對不起,我不知道'wc -f'是幹什麼的。另外,如果文件太大,可能是在'wc'運行時寫入的,這可以解釋不同之處。 – user4815162342