【Python】批處理文件並插入到mysql數據庫

問題

最近在項目的時候遇到一個頭大的問題,客戶手中有份人員名單和人員照片。須要把人員信息數據庫表照片信息補全,就是說要將人員照片和數據庫人員一一對應。起初項目小夥伴說要手動錄入寫一個頭像上傳的程序一個個上傳人員照片。幾百號人的數聽說多也很少說少也很多,若是所有手動錄入不說麻煩的問題,可能中途還容易出錯。我看了一眼人員照片文件是以人名命名,正好和數據庫人員數據REALNAME字段相對應。其次重複人名並很少大概幾個而已,能夠以後作單獨處理。人生苦短我用python,何須自找苦吃呢python

須要作什麼

  1. t_users表中REALNAME和照片命名是對應關係
  2. 照片須要重命名爲當時的時間戳
  3. t_users表IMGURL存入圖片所在地址以及圖片名稱

python酸爽初體驗

開始前須要先下載Image和Mysql支持庫,Image庫是須要下載安裝PIL
PS:使用python2.7 pip安裝mysql.connector庫失敗 最後去Oracle官網直接下載安裝mysql.connector 瞬間爬坑 未知命令行安裝爲什麼失敗mysql

遍歷文件執行代碼(參考度娘)sql

#!/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/50248409python2.7

相關文章
相關標籤/搜索