本文最后更新于 将近 9 年前,文中所描述的信息可能已发生改变。
事件背景: 接到一个任务,要我完成对很多文件改名字的操作。 任务原因是美工切过来的图片都是中文名,于是有人把xhdpi文件夹中的文件改成了英文名, 本来这也没什么问题,因为刚开始就说好只用xhdpi的内容,其他不需要放。 我问 "为什么会需要其他几个dpi的文件,Android不是会自动进行等比缩放的吗?" 答: "以后可能需要。" 好吧…
于是我又跟他说,android studio的重命名快捷键也可以对图片操作的,先把中文名的图片导入, 接着只要改了其中一个dpi的文件名,其他dpi也会自动改过来。 然而现在已经是一个dpi变了而其他的并没有变成英文的。最终这个重复劳动还是让我来做了, 以后新加的图片会考虑用我说的方法。
然后开始思考有没有方便的方法,一个个手动重命名实在太蠢了。 想到了两个方法:
- 还是利用android studio的快捷键,找到中英文对应的图片,然后用快捷键把中文名改成英文名。
- 找到中英文的映射关系记录到一个字典里,然后用脚本实现批量重命名。
最后还是决定用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')
想起了小时候看过的一篇文章 如何成为一名黑客 我对下面这句话印象很深刻:
黑客(以及所有创造力的人们)都不应该被愚蠢的重复性劳动所困扰。重复性劳动浪费了他们解决新问题的时间,而解决新问题正是黑客最大的价值所在。这种浪费会伤害到每一个人。无聊和乏味的工作不仅仅是令人不舒服而已,而且本身就是一种罪恶。
作为一个黑客,你必须坚信这点并尽可能多地将乏味的工作自动化,这不仅是为了你自己,也是为了其他人(尤其是其他黑客们)。
这次事件感觉也算是对黑客精神一次小小的实践了吧。