查找除测试用例外的全部Python代码行

时间:2019-06-25 15:56:38

标签: python python-3.x bash shell

我们有一个Python应用程序,想要统计特定目录及其子目录下的所有代码行。

我们不需要忽略注释,但是我们希望忽略包含测试用例的所有文件。

测试用例文件的路径在路径0 0.9000 1 0.9000 2 1.0663 中始终具有/tests/

我使用下面的命令查找计数,但没有排除测试文件。

(e.g. /python/trieus/persistence/service/tests/batch_service_tests.py)

这里的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

通过将第一个.更改为*,可以排除任何级别的目录。因此find -name "*.py" -not -path "*/tests/*"会忽略任何深度级别的名为"tests"的目录中的文件。

因此命令将如下所示:

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

我希望这会有所帮助!

答案 1 :(得分:1)

您可以这样做:

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 '.*' {} +获得单独的行,您可以在此处修改正则表达式模式以满足您的需求
  • paste -sd+将输出的格式设置为一行,中间插入+
  • bc在其STDIN数据上进行加法

我建议您一次走一步,以更好地了解整个事情。

请注意,这不会获得实际的LOC,而只会显示行数。

在系统上的示例目录中运行的示例:

% find . -type d -name tests -prune -o -type f -name '*.py' -exec grep -hxc '.*' {} + | paste -sd+ | bc
5594