资讯专栏INFORMATION COLUMN

【Python】批处理文件并插入到mysql数据库

jsummer / 1926人阅读

摘要:问题最近在项目的时候遇到一个头大的问题,客户手中有份人员名单和人员照片。需要把人员信息数据库表照片信息补全,就是说要将人员照片和数据库人员一一对应。我看了一眼人员照片文件是以人名命名,正好和数据库人员数据字段相对应。

问题

最近在项目的时候遇到一个头大的问题,客户手中有份人员名单和人员照片。需要把人员信息数据库表照片信息补全,就是说要将人员照片和数据库人员一一对应。起初项目小伙伴说要手动录入写一个头像上传的程序一个个上传人员照片。几百号人的数据说多也不多说少也不少,如果全部手动录入不说麻烦的问题,可能中途还容易出错。我看了一眼人员照片文件是以人名命名,正好和数据库人员数据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://blog.csdn.net/u012234115/article/details/50248409

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40730.html

相关文章

  • Python3网络爬虫实战---32、数据存储:关系型据库存储:MySQL

    摘要:关系型数据库有多种,如等等。一致性与原子性是密切相关的。持久性持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。如此一来,我们就可以实现主键不存在便插入数据,存在则更新数据的功能了。 上一篇文章:Python3网络爬虫实战---31、数据存储:文件存储下一篇文章:Python3网络爬虫实战---33、数据存储:非关系型数据库存储:MongoDB 关系型数据...

    ghnor 评论0 收藏0
  • Python据库连接批量插入包括时长记载的实际操作

      文中关键阐述了Python数据库连接并批量插入包括时长记载的实际操作,文章内容紧扣主题进行详尽的基本介绍,具有很强的实用价值,需用的同学可以学习一下  序言  服务平台:  windows10.0  python3.8  oracle  mysql  目地  必须通过python建立模型,并把结论储存至SQL数据库系统中,其中还有某列数据信息为时长种类,在储存全过程碰到一些现象,现就处理方式整...

    89542767 评论0 收藏0
  • [零基础学python]用Python操作据库(1)

    摘要:操作数据库要对数据库进行操作,需要先连接它。执行后返回值为受影响的行数。执行单条语句但是重复执行参数列表里的参数返回值为受影响的行数例如,要在数据表中插入一条记录,使得,这样做没有报错,并且返回一个结果,说明有一行记录操作成功。 在上一讲中已经连接了数据库。就数据库而言,连接之后就要对其操作。但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必...

    lolomaco 评论0 收藏0
  • 工具使用-积累与发现

    摘要:一积累中如何快速查看包中的源码最常用的大开发快捷键技巧将对象保存到文件中从文件中读取对象中的用法的配置详解和代码的格式详解格式化内容设置生成详解注释规范中设置内存调试的小知识单步执行命令的区别的动态代理机制详解内容有瑕疵,楼指正泛型继承的几 一、积累 1.JAVA Eclipse中如何快速查看jar包中 的class源码 最常用的15大Eclipse开发快捷键技巧 Java将对象保存到...

    wangjuntytl 评论0 收藏0

发表评论

0条评论

jsummer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<