Вместо простого вызова wc -l
, начните с:
cat your_input.csv | sed '/^\s*$/d' | wc -l
Таким образом, вы не будете считать строки, которые либо пусты, либо содержат только «белые» символы (или, возможно, sed '/^$/d'
, чтобы пропустить только пустые строки).
Помните, что read_csv
имеет параметр skip_blank_lines
, который по умолчанию равен True
.
Редактировать
Другая возможность заключается в том, что исходный файл может содержат строки, оканчивающиеся на \
. Такие случаи read_csv обрабатываются как «продолжение этой строки в следующей строке», поэтому эти 2 (или более) строки содержат данные для одной строки в результирующем кадре данных.
Приведенное выше правило относится также к строке title .
Я попробовал входной файл со следующим содержимым:
a,b,\
c
aa1,12,30
aa2,13,\
32
aa3,14,34
aa4,15,36
aa5,16,38
, чтобы:
- строка aa2,13, имеет продолжение в следующей строке,
- следующая строка пуста (я пробовал также версию, которая содержит только пробелы) .
Такой файл, считанный с read_csv , дает DataFrame с 5 строками, но wc -l
будет считать 9 строками Вот. Поскольку параметр skip_blank_lines имеет значение по умолчанию ( False ), и пустые строки, и строки, содержащие только пробелы, также пропускаются.