0x1、起因
有群友在 开车吃瓜群 问 技术问题:
网络异常,图片无法展示
|
热心助人的 杰哥
嗅到了 又可以练手
的契机,反正等下班,看着挺简单,说不定自己也有用,丢下一句 下班前给你
后就开始了折腾。
0x2、脚本思路
① 基本思路
- 一个项目包含多个模块,一般丢在同一个目录,递归遍历过滤获取所有资源文件就好,得出一个资源文件列表;
- 对资源文件列表进行遍历,排除某些目录或文件(如/build,AndroidManifest.xml),将文件名相同的文件放一起;
- 将遍历结果,格式化输出到文件中;
② 实现细节
1、检索所有资源文件
利用 os.listdir() 可获取当前目录下所有文件,os.chdir() 能切换当前目录,遍历判断:文件夹→往下递归,资源文件→保存,非资源文件→跳过,当然为了使检索过程更直观,可把文件类型打印出来,这一步能得到资源列表;
2、分析名字重复的资源文件
遍历上一步获取到的资源列表,利用 any()函数,批量判断资源是否在排除列表中,同时获取文件md5,接着这样的键值对
文件名:list('md5→文件绝对路径')
保存到字典中;
3、格式化输出
对上一步中产出的重名文件字典进行处理,一些空判断,然后是遍历,拼接输出文本,最后输出到结果文件中。
整体流程比较简单,主要是一些细节处理。
③ 使用与效果演示
来看下脚本的具体效果吧 (运行需安装Python环境,官网下个安装包傻瓜下一步就好):
网络异常,图片无法展示
|
直接 双击打开 或命令行键入 python repeat_res_check.py
都可:
网络异常,图片无法展示
|
接着目录下会生成两个文件:
name_repeat_result.txt
→ 文件名相同的结果文件,适用于抽取同名文件不同文件内容比对(md5不同)
网络异常,图片无法展示
|
md5_repeat_result.txt
→ md5相同的但文件名不同的文件,适用于资源瘦身减少重复文件~
网络异常,图片无法展示
|
读者也可按需对资源类型、排除目录/文件进行定制,直接改这里,所以其实并不局限于Android项目查重:
网络异常,图片无法展示
|
如果有Python基础,还可以自行扩展,比如索引资源被引用位置,进行多文件等的批量替换~