Найти общее количество строк кода Python, исключая тестовые случаи - PullRequest
1 голос
/ 25 июня 2019

У нас есть приложение на Python, и мы хотим подсчитать все строки кода в определенном каталоге и его подкаталогах.

Нам не нужно игнорировать комментарии, но мы хотим игнорировать все файлы, содержащие тестовые случаи.

Путь к файлу тестовых случаев всегда имеет /tests/ в пути (e.g. /python/trieus/persistence/service/tests/batch_service_tests.py).

Я использовал приведенную ниже команду для поиска счетчика, но он не исключал тестовые файлы.

find . -name "*.py" -not -path "./tests*" | xargs wc -l | sort

Какой здесь правильный синтаксис?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Вы можете сделать:

find . -type d -name tests -prune -o -type f -name '*.py' \
       -exec grep -hxc '.*' {} + | paste -sd+ | bc
  • find . -type d -name tests -prune исключает каталог tests
  • -type f -name '*.py' соответствует только .py файлам
  • -exec grep -hxc '.*' {} + получить отдельные строки, вы можете изменить шаблон Regex, чтобы соответствовать вам здесь
  • paste -sd+ форматирует вывод в одну строку с + между
  • bc выполняет сложение по своим данным STDIN

Я бы посоветовал вам сделать шаг за шагом, чтобы лучше понять все это.

Как примечание, это не даст вам фактический LOC, вместо этого вы получите только количество строк.

Пример запуска в каталоге примеров в моей системе:

% find . -type d -name tests -prune -o -type f -name '*.py' -exec grep -hxc '.*' {} + | paste -sd+ | bc
5594
1 голос
/ 25 июня 2019

Вы можете исключить каталог на ЛЮБОМ уровне, изменив первый . на *.поэтому find -name "*.py" -not -path "*/tests/*" будет пропускать файлы из каталога с именем "tests" на любом уровне глубины.

, поэтому команда будет выглядеть следующим образом:

find . -name "*.py" -not -path "*/tests/*" | xargs wc -l | sort

Iнадеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...