【发布时间】:2015-01-21 15:37:57
【问题描述】:
我最近的任务是审核我的团队在整个生产代码存储库中使用的所有 python 模块。
我想出了以下内容:
find ~/svn/ -name *.py
| xargs grep -hn "^import\|^from"
| awk -F ":" '{print $2}'
| awk '{if (/from/) print $2; else {$1 = ""; print $0} }'
| sed 's/,\| /\n/g'
| sort
| uniq > /tmp/pythonpkgs.txt
依次是
- 查找所有 python 文件
- 其中,grep 查找以
import或from开头的行 - 拆分
:字符并使用后面的内容,因此不包括文件名和输出编号 - 如果该行的格式为
from foo import bar,则打印foo,否则如果它的格式为import foo,则打印foo - 用换行符替换逗号和空格,对于像
import a, b, c这样的行 - 对输出进行排序并获取唯一性
我自己破解了这个,但我想它可能会更好。你会怎么做?合并awks?
【问题讨论】:
-
显示您正在解析的数据的示例,但从外观上看,除了 find 之外的所有内容都可以在单个 awk 脚本中完成
-
请注意,对于分布在多行的导入,这将失败;但也许这在代码中不存在。我假设你已经安全地运行了上面的代码。
-
@JID 如果您愿意,我可以发布一个示例,但它都是各种类型的 python 脚本,我想在其中检测字符串
pygal.style或time中的pygal.style等内容在import time内。 @Evert - 你是对的。我确实对样本进行了人工审核,我相信我不需要担心这种情况。