事件背景:
接到一个任务,要我完成对很多文件改名字的操作。
任务原因是美工切过来的图片都是中文名,于是有人把xhdpi文件夹中的文件改成了英文名,
本来这也没什么问题,因为刚开始就说好只用xhdpi的内容,其他不需要放。
我问 “为什么会需要其他几个dpi的文件,Android不是会自动进行等比缩放的吗?”
答: “以后可能需要。”
好吧..

于是我又跟他说,android studio的重命名快捷键也可以对图片操作的,先把中文名的图片导入,
接着只要改了其中一个dpi的文件名,其他dpi也会自动改过来。
然而现在已经是一个dpi变了而其他的并没有变成英文的。最终这个重复劳动还是让我来做了,
以后新加的图片会考虑用我说的方法。

然后开始思考有没有方便的方法,一个个手动重命名实在太蠢了。
想到了两个方法:

  1. 还是利用android studio的快捷键,找到中英文对应的图片,然后用快捷键把中文名改成英文名。
  2. 找到中英文的映射关系记录到一个字典里,然后用脚本实现批量重命名。

最后还是决定用python来实现,可以复习一下python语法,顺便学一下文件操作。
以后碰到类似的任务,也可以同样的方法解决了。
因为xhdpi中的文件比其他文件夹中要多几个,而且xhdpi中也有些中文名,并没有改掉,多余代码
中也特殊处理了下。

当时想用图像识别的方法自动完成映射,看了篇图像识别的博客,但是担心识别率不高而且时间不够,所以还是使用肉眼识别了。过几天再仔细研究下。

下面是具体的代码,其中name_map写了六十几条,这里省略了很多。
用到的文件操作基本都在这里,主要就是判断路径存在,创建文件夹以及移动文件了。

import os
import shutil
source_dir = 'E:\\source\\'
target_dir = 'E:\\target\\'
mdpi = 'mipmap-mdpi'
hdpi = 'mipmap-hdpi'
xhdpi = 'mipmap-xhdpi'
xxhdpi = 'mipmap-xxhdpi'
xxxhdpi = 'mipmap-xxxhdpi'
dpi_list = [mdpi, hdpi, xxhdpi, xxxhdpi]

name_map = {
'address_select_img':'地址-点击','cart_select_img':'购物车-点击'
}

source_name = os.listdir(source_dir + xhdpi)
print(len(name_map.keys()))
for name in source_name:
    #英文名
    target_name = name.split('.')[0] 

    for dpi in dpi_list:
        dst_dir = target_dir + dpi
        if False == os.path.exists(dst_dir):
                os.mkdir(dst_dir)

        if name_map.keys().__contains__(target_name):

            src = source_dir + dpi + '\\' + name_map[target_name] + '.png'

            if os.path.exists(src):

                dst = dst_dir + '\\' + target_name + '.png'
                shutil.copyfile(src, dst)

            else:
                print('file ' + src + ' not exists')
        else:
            if os.path.exists(source_dir + dpi + '\\' + name):
                shutil.copyfile(source_dir + dpi + '\\' + name, dst_dir + '\\' + name)
            else:
                print('file ' + name + ' also not exists')

想起了小时候看过的一篇文章
如何成为一名黑客
我对下面这句话印象很深刻:

黑客(以及所有创造力的人们)都不应该被愚蠢的重复性劳动所困扰。重复性劳动浪费了他们解决新问题的时间,而解决新问题正是黑客最大的价值所在。这种浪费会伤害到每一个人。无聊和乏味的工作不仅仅是令人不舒服而已,而且本身就是一种罪恶。

作为一个黑客,你必须坚信这点并尽可能多地将乏味的工作自动化,这不仅是为了你自己,也是为了其他人(尤其是其他黑客们)。

这次事件感觉也算是对黑客精神一次小小的实践了吧。