количество строк в wc -l и python отличается - PullRequest
1 голос
/ 27 июня 2019

Мне интересно, почему простой подсчет строк с использованием bash дает мне количество строк, отличное от вычисленного с использованием python (версия 3.6) для файлов, указанных здесь (train_en.txt) и здесь (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 результаты don 't совпадают с данными предыдущей команды python).

Для справки, это параллельные массивы текста, полученные путем объединения Common Crawl , Europarl и Комментарий к новостям наборов данных (в указанном порядке) из перевода на английский язык с немецкого языка и должен иметь такое же количество строк.

1 Ответ

3 голосов
/ 27 июня 2019

\n с можно рассматривать как многобайтовые символы, а не как фактические \n.Этого можно избежать, используя кодировку bytestring.Все команды

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 дляпомощь.

...