根据表格重命名图片

由于NOIP报名的问题,谢老师想把照片根据Excel表格中的信息重命名。原来的照片格式为:名字.jpg或者编号+名字.jpg。我觉得这个要去网上找软件也很麻烦,应该拿来用Python搞搞就好了,于是就自告奋勇地接下了这个任务,结果花了我半个小时不止……(没办法Python不熟)

首先,当然要处理Excel表格,我的做法是把编号和名字那列提出来,然后另存为csv文件。这样csv文件里面每一行都是编号,名字

然后要对csv文件进行处理,转成UTF-8编码,这样Python处理的时候就省事很多了

然后就是程序如下(Python2.7):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/python2.7
import os
import sys

names = {}
for line in open('name.csv', 'r'):
    info = line.split(',')
    names[info[1].replace('r', '').replace('n', '')] = info[0]

for f in os.listdir(os.getcwd()):
    if f.split('.')[1].upper() != 'JPG':
        continue
    name = f.split('.')[0]
    old = filter(lambda ch: ch not in '0123456789 ', name)
    if old in names:
        oldname = f
        newname = names[old] + old + '.jpg'
        #print '[%20s]  =>  [%20s]' % (oldname, newname)
        os.rename(oldname, newname)
        del names[old]
    else:
        print old, 'not in names'

for name in names:
    print name, names[name]

大概的流程就是先把名字和编号存到字典names里面,然后对于目录当中的每个.jpg文件,得到那个人的姓名(也就是old),再在字典中查询,生成新的文件名并重命名。还有一个就是能显示出哪些人在名表中但是没有照片,以及哪些人有照片但不在名表中。

其实那个过滤数字和空格的方法是从StackOverflow上找到的,见:Strip all non-numeric characters (except for “.”) from a string in Python

Comments