wc -l和python行数不同

时间:2019-06-26 22:56:34

标签: python bash count line wc

我想知道为什么对于给定heretrain_en.txt)和{{的文件,使用bash进行简单的行计数会比使用python(版本3.6)计算出的行数有所不同) 3}}(train_de.txt)。在bash中,我正在使用命令:

wc -l train_en.txt
wc -l train_de.txt

输出分别为4520620和4520620。

在python中,我正在使用以下命令:

print(sum(1 for line in open('train_en.txt')))
print(sum(1 for line in open('train_de.txt')))

输出分别为4521327和4521186。

当我使用python命令时

len(open('train_en.txt').read().splitlines())
len(open('train_de.txt').read().splitlines())

我分别得到4521334和4521186(其train_en.txt结果与先前的python命令的结果不匹配。

作为参考,这些是通过串联来自hereCommon CrawlEuroparlNews Commentary数据集(按顺序)而产生的并行文本语料库,并且应具有相同的行数。

1 个答案:

答案 0 :(得分:3)

\n可以被视为多字节字符,而不是实际的\n。可以通过使用字节串编码来避免这种情况。命令

print(sum(1 for line in open('train_en.txt', mode='rb')))
print(sum(1 for line in open('train_de.txt', mode='rb')))
len(open('train_en.txt', mode='rb').read().splitlines())
len(open('train_de.txt', mode='rb').read().splitlines())

所有结果均为4520620(与wc -l的输出匹配),这意味着英语和德语语料库根据需要是平行的。

感谢@CharlesDuffy的帮助。