问题
最近在项目的时候遇到一个头大的问题,客户手中有份人员名单和人员照片。需要把人员信息数据库表照片信息补全,就是说要将人员照片和数据库人员一一对应。起初项目小伙伴说要手动录入写一个头像上传的程序一个个上传人员照片。几百号人的数据说多也不多说少也不少,如果全部手动录入不说麻烦的问题,可能中途还容易出错。我看了一眼人员照片文件是以人名命名,正好和数据库人员数据REALNAME字段相对应。其次重复人名并不多大概几个而已,可以之后做单独处理。人生苦短我用python,何必自找苦吃呢
需要做什么
- t_users表中REALNAME和照片命名是对应关系
- 照片需要重命名为当时的时间戳
- t_users表IMGURL存入图片所在地址以及图片名称
python酸爽初体验
开始前需要先下载Image和Mysql支持库,Image库是需要下载安装PIL
PS:使用python2.7 pip安装mysql.connector库失败 最后去Oracle官网直接下载安装mysql.connector 瞬间爬坑 未知命令行安装为何失败
遍历文件执行代码(参考度娘)
#!/usr/bin/python
#coding=utf-8
import os
import os.path
import time
import mysql.connector
import time
rootdir = '/Users/julyyu/imgs/pics' # 指明被遍历的文件夹
conn=mysql.connector.connect(user='root',password='xxx',host='xxx',database='xxx')
c = conn.cursor()
for parent,dirnames,filenames in os.walk(rootdir): #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames: #输出文件信息
(name,extension) = filename.split(".")
print "filenameonly is:" + name #输出图片名
if name:
newname = str(int(time.time())) + ".jpg" #时间戳命名
print "newname is:" + newname
os.rename(rootdir+"/"+filename , rootdir+"/"+newname) #对图片进行重命名
tempname = "/lzgl/" + newname #数据库存入的图片路径
query = "update t_users set IMGURL = '" + tempname + "' where REALNAME = '" + name + "'"
c.execute(query)
conn.commit()
time.sleep(2) #防止时间戳重复 睡两秒 也可以睡0.5 这样处理会更快一些
c.close()
conn.close()
之后又对图片进行了压缩操作 原图每张10+M的一寸照无法忍, 代码如下
#!/usr/bin/python
#coding:utf-8
from PIL import Image
import os
#图片压缩批处理
def compressImage(srcPath,dstPath):
for filename in os.listdir(srcPath):
#如果不存在目的目录则创建一个,保持层级结构
if not os.path.exists(dstPath):
os.makedirs(dstPath)
#拼接完整的文件或文件夹路径
srcFile=os.path.join(srcPath,filename)
dstFile=os.path.join(dstPath,filename)
print srcFile
print dstFile
#如果是文件就处理
if os.path.isfile(srcFile):
#打开原图片缩小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函数等针对特定文件压缩
sImg=Image.open(srcFile)
w,h=sImg.size
print w,h
dImg=sImg.resize((w/2,h/2),Image.ANTIALIAS) #设置压缩尺寸和选项,注意尺寸要用括号
dImg.save(dstFile) #也可以用srcFile原路径保存,或者更改后缀保存,save这个函数后面可以加压缩编码选项JPEG之类的
print dstFile+" compressed succeeded"
#如果是文件夹就递归
if os.path.isdir(srcFile):
compressImage(srcFile,dstFile)
if __name__=='__main__':
compressImage("/Users/julyyu/imgs/tempa","/Users/julyyu/imgs/temps") #压缩前的文件路径和压缩后的文件路径
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。