1. 程式人生 > >python實現網上閱卷切割圖片的重分類和命名視窗程式

python實現網上閱卷切割圖片的重分類和命名視窗程式

網上閱卷切割的圖片是以考號命名,然後是每個考生的切割圖片

如圖:


該檔案實現功能是將圖片重新分類命名組織如下:


輸入:1、切割圖片的源目錄:001資料夾路徑

        :2、考生考號exl表要求格式如下

           

          關鍵是第一列,第二列,第五列必須為學號,姓名,班級,且第一行為標題行

輸出:1、以班級-圖片塊-姓名分類組織的資料夾

所用模組:操作excel-win32com.client

               :  操作檔案與目錄-os、shutil

              :  窗體-wx

執行效果:


# -*- coding: cp936 -*-


#----------------------------
# 檔名稱: EnglishMin.py
# 作    者: ghf
# 日    期: 2014-3-24
# 功    能:1、將網上閱卷切割的英語二卷,作文題目
#           按照班級分開,並且以學生姓名命名
# 版    本:v0.1
#
# 日    期:2014-3-28
# 版    本:v0.2
# 功    能:1、將網上閱卷切割的試卷,按照班級命名
#           -->切割塊命名的資料夾-->姓名命名圖片
#----------------------------

import wx
import os
import sys
import shutil#刪除非空目錄
import win32com.client
#修改系統預設字型
reload(sys)
sys.setdefaultencoding( 'cp936' )


class MainFrame(wx.Frame):
    #初始建構函式
    def __init__(self, parent, id=-1, title='EnglishM',
                 position=wx.DefaultPosition, size=(500, 400)):
        self.frame = wx.Frame.__init__(self, parent, id, title, position, size)
        self.InitUI()
        self.Show()
        pass

    def InitUI(self):
        #容器佈局用
        self.panel = wx.Panel(self, -1)
        vBox = wx.BoxSizer(wx.VERTICAL)
        hSrcPicPathBox = wx.BoxSizer(wx.HORIZONTAL)
        hStuPathBox = wx.BoxSizer(wx.HORIZONTAL)
        hDesPicPathBox = wx.BoxSizer(wx.HORIZONTAL)
        #---建立控制元件
        #學生切割圖片儲存目錄
        self.labSrcPicPath = wx.StaticText(self.panel, -1, '請選擇圖片源目錄:')
        self.txtSrcPicPath = wx.TextCtrl(self.panel, -1, value='')
        self.btnSrcPicPath = wx.Button(self.panel, -1, '瀏覽')
        #學生原始檔目錄
        self.labStuPath = wx.StaticText(self.panel, -1, '請選擇學生考號檔案:')
        self.txtStuPath = wx.TextCtrl(self.panel, -1, value='')
        self.btnStuPath = wx.Button(self.panel, -1, '瀏覽')
        #學生目的圖片儲存目錄
        self.labDesPicPath = wx.StaticText(self.panel, -1, '請選擇儲存圖片目錄:')
        self.txtDesPicPath = wx.TextCtrl(self.panel, -1, value='')
        self.btnDesPicPath = wx.Button(self.panel, -1, '瀏覽')
        #生成結果顯示
        self.txtResult = wx.TextCtrl(self.panel, -1, value='', style=wx.TE_MULTILINE)
        #開始生成
        self.btnBeginCreate = wx.Button(self.panel, -1, '開始生成')

        #---繫結事件
        self.Bind(wx.EVT_BUTTON, self.OnBtnSrcPic, self.btnSrcPicPath)
        self.Bind(wx.EVT_BUTTON, self.OnBtnStu, self.btnStuPath)
        self.Bind(wx.EVT_BUTTON, self.OnBtnDesPic, self.btnDesPicPath)
        self.Bind(wx.EVT_BUTTON, self.OnBtnBeginCreate, self.btnBeginCreate)
        
        
        

        #添加布局管理器
        hSrcPicPathBox.Add(self.labSrcPicPath, 0, wx.EXPAND, 2)
        hSrcPicPathBox.Add(self.txtSrcPicPath, 0, wx.EXPAND, 2)
        hSrcPicPathBox.Add(self.btnSrcPicPath, 0, wx.EXPAND, 2)

        hStuPathBox.Add(self.labStuPath, 0, wx.EXPAND, 2)
        hStuPathBox.Add(self.txtStuPath, 0, wx.EXPAND, 2)
        hStuPathBox.Add(self.btnStuPath, 0, wx.EXPAND, 2)

        hDesPicPathBox.Add(self.labDesPicPath, 0, wx.EXPAND, 2)
        hDesPicPathBox.Add(self.txtDesPicPath, 0, wx.EXPAND, 2)
        hDesPicPathBox.Add(self.btnDesPicPath, 0, wx.EXPAND, 2)
        
        vBox.Add(hSrcPicPathBox, 0, wx.EXPAND|wx.ALL, 10)
        vBox.Add(hStuPathBox, 0, wx.EXPAND|wx.ALL, 10)
        vBox.Add(hDesPicPathBox, 0, wx.EXPAND|wx.ALL, 10)
        vBox.Add(self.btnBeginCreate, 0)
        vBox.Add(self.txtResult, 2, wx.EXPAND|wx.ALL, 10)
        
        self.panel.SetSizer(vBox)
        pass
    #--事件處理函式
    #單擊瀏覽源圖片
    def OnBtnSrcPic(self, event):
        dirSrcPicPath = wx.DirDialog(self.panel, "選擇源圖片目錄")
        if dirSrcPicPath.ShowModal() == wx.ID_OK:
            #print dirSrcPicPath.GetPath()
            self.txtSrcPicPath.SetValue(dirSrcPicPath.GetPath())
        dirSrcPicPath.Destroy()
        pass
    #單擊瀏覽學生檔案
    def OnBtnStu(self, event):
        filesFilter = "Excel Files (*.xls)|*.xls"
        fileDialog = wx.FileDialog(self, message ="選擇學生名單exl檔案",
                                   wildcard = filesFilter, style = wx.FD_OPEN)
        dialogResult = fileDialog.ShowModal()
        if dialogResult !=  wx.ID_OK:
            return
        path = fileDialog.GetPath()
        self.txtStuPath.SetValue(path)
             
        pass
    #單擊瀏覽儲存目錄圖片
    def OnBtnDesPic(self, event):
        dirDesPicPath = wx.DirDialog(self.panel, '選擇圖片儲存目錄')
        if dirDesPicPath.ShowModal() == wx.ID_OK:
            self.txtDesPicPath.SetValue(dirDesPicPath.GetPath())
        dirDesPicPath.Destroy()
        pass
    def OnBtnBeginCreate(self, event):
        msg = ''
        #msg = msg.replace("\\", "\\\\")
        #驗證
        if not os.path.exists(self.txtSrcPicPath.GetValue()):
            msg = msg + '請選擇源圖片目錄\n'
        if not os.path.exists(self.txtStuPath.GetValue()):
            msg = msg + '請選擇學生名單\n'
        if not os.path.exists(self.txtDesPicPath.GetValue()):
            msg = msg + '請選擇儲存圖片目錄\n'
        if not msg=='':
            #msgDlg = wx.MessageDialog(self.panel, msg, '提示', wx.OK)
            #msgDlg.ShowModal()
            #msgDlg.Destroy()
            pass

        #開啟excel檔案
        xlsApp = win32com.client.Dispatch('Excel.Application')
        xlsBook = xlsApp.Workbooks.Open(self.txtStuPath.GetValue())
        xlsSheet = xlsBook.Sheets[0]
        
        rowCount = xlsSheet.UsedRange.currentregion.Rows.Count#行數
        colCount = xlsSheet.UsedRange.currentregion.Columns.Count#列數
        #(1,1)->(rowcount, colcount)獲取結果集
        result = xlsSheet.Range(xlsSheet.Cells(1,1), xlsSheet.Cells(rowCount, colCount)).Value
        msg = ''

        #獲取班級
        clsList = []
        for row in result[1:len(result)]:
            i = 0
            for rowCls in clsList:
                if row[4]==rowCls:
                    break;
                i = i + 1
            if i>=len(clsList):
                clsList.append(row[4])
            pass
        #獲取切割塊名稱
        srcPicList = os.listdir(self.txtSrcPicPath.GetValue())
        cutBlockList = os.listdir(self.txtSrcPicPath.GetValue()+'\\'+srcPicList[0])
        
        #生成目錄
        self.txtResult.AppendText('***開始生成班級目錄***\n\n')
        desPath = self.txtDesPicPath.GetValue()
        for row in clsList:
            clsPath = desPath + '\\' + row
            #先刪後建
            if os.path.exists(clsPath):
                shutil.rmtree(clsPath)
                os.makedirs(clsPath)
                #建立以切割塊命名的子資料夾
                for cutRow in cutBlockList:
                    os.makedirs(clsPath+'\\'+cutRow)
            else:
                os.makedirs(clsPath)
                  #建立以切割塊命名的子資料夾
                for cutRow in cutBlockList:
                    os.makedirs(clsPath+'\\'+cutRow)
            self.txtResult.AppendText('成功建立目錄:  '+row+'\n ')
            
        self.txtResult.AppendText('\n\n***班級目錄建立結束***\n\n')

        #開始拷貝檔案
        self.txtResult.AppendText('\n\n***開始拷貝檔案***\n\n請稍後...\n\n')

        i = 0
        msg = ''
        for row in result[1:len(result)]:
            #以塊資料夾為單位進行拷貝
            for cutRow in cutBlockList:
                srcPath = self.txtSrcPicPath.GetValue()+'\\'+ row[0]+'\\'+cutRow
                desPath = self.txtDesPicPath.GetValue() + '\\' + row[4] + '\\'+cutRow+'\\' + row[1]+'.jpg'

                if os.path.exists(srcPath):
                    i = i + 1
                    shutil.copyfile(srcPath, desPath)
                    self.txtResult.AppendText(str(i)+'成功拷貝:   '+row[1]+'.jpg\n')
                    #msg = msg + str(i)+'成功拷貝:   '+row[1]+'.jpg\n'
                    
                        
        #self.txtResult.AppendText(msg)                
        self.txtResult.AppendText('\n\n***拷貝圖片結束***\n\n')
        
        #釋放資源
        xlsBook.Close()
        del xlsApp

        self.txtResult.AppendText(msg)        
        
        
        
        pass

def main():
    app = wx.App(redirect=False)
    mainFrame = MainFrame(None, -1)
    app.MainLoop()

if __name__ == '__main__':
    main()
    


相關推薦

python實現網上閱卷切割圖片分類命名視窗程式

網上閱卷切割的圖片是以考號命名,然後是每個考生的切割圖片 如圖: 該檔案實現功能是將圖片重新分類命名組織如下: 輸入:1、切割圖片的源目錄:001資料夾路徑         :2、考生考號exl表要求格式如下                       關

柵格分類條件函數均可以實現對流量統計數據進行定義劃分

target 結構 .html ctu 定義 net hue thread 影響 ArcGIS水分分析工具的流向分析是基於D8單流向算法,如果分析使用的DEM存在凹陷點,就會產生匯,導致徑流斷流從而影響了分析結果。在前面章節《ArcGIS水文分析實戰教程(2)ArcGIS水

python-實現一個貼吧圖片爬蟲

fix request arm agent x64 pan http python2 png 今天沒事回家寫了個貼吧圖片下載程序,工具用的是PyCharm,這個工具很實用,開始用的Eclipse,但是再使用類庫或者其它方便並不實用,所以最後下了個專業開發python程序的工

python實現王者榮耀英圖片收集

pytho 獲取圖片 所有 orien 發現 mark 請求 發出 view 一個python寫的小爬蟲項目,爬蟲相關的很容易寫,關鍵是怎麽找到爬取圖片的位置。 圖片位置分析 hero_list_url = 'http://pvp.qq.com/web201605

python實現隨機森林、邏輯回歸樸素貝葉斯的新聞文本分類

ati int ces 平滑 讀取 inf dict http tor 實現本文的文本數據可以在THUCTC下載也可以自己手動爬蟲生成, 本文主要參考:https://blog.csdn.net/hao5335156/article/details/82716923 nb表

利用Python實現簡單的相似圖片搜尋

 【搞了好幾天,終於把程式復原除錯通過,特此在這裡把技術文件貼出來,尤其是環境配置的說明,供大家分享。】   寫作本文的目是發現建立網站的時候,很多使用者用相同的頭像,這導致識別度降低,為了防止使用者上傳相同的圖片作為自己的頭像以及上傳不當的影象檔案,作者研究了這個

Python實現決策樹對西瓜進行分類

使用的周志華老師書上的例子,因為習主席講過一切不給資料集的演算法都是耍流氓,所以我這裡先給出資料集: 0,色澤,根蒂,敲聲,紋理,臍部,觸感,密度,含糖率,好瓜 1,青綠,蜷縮,濁響,清晰,凹陷,硬滑,0.697,0.46,是 2,烏黑,蜷縮,沉悶,清晰,凹陷,硬滑

利用Python實現樸素貝葉斯文字分類

Python是一種面向物件、解釋型計算機程式設計語,作者是Guido van Rossum(吉多·範羅蘇姆),1991年公開正式發行。粗糙進行歸納: (1)Python是純粹自由軟體,原始碼和直

python實現pdf格式轉換圖片格式

使用python程式碼實現pdf轉換圖片格式 核心程式碼: import io from wand.image import Image from wand.color import Color from PyPDF2 import PdfFileReader, PdfF

機器學習筆記(二)矩陣線性代數 例:用Python實現SVD分解進行圖片壓縮

線性代數基本只要是理工科,都是必修的一門課。當時學習的時候總是有一個疑惑,這個東西到底是幹嘛用的?為什麼數學家發明出這麼一套方法呢,感覺除了解方程沒發現有什麼大用啊!但隨著學習的深入,慢慢發現矩陣的應

python實現使用者登入三次

主要實現的是: 設定初始使用者名稱和登入密碼; 進入登入頁面,提醒輸入使用者輸入使用者名稱和密碼; 若使用者名稱輸錯則重新輸入,若使用者登入密碼輸錯三次則重新開始輸入使用者名稱和使用者登入密碼;

python實現yuv轉RGB圖片程式

import os import cv2 import numpy as np from PIL import Image #from scipy import misc import utilty as util search_path = 'E:/sti

python實現讀取並顯示圖片的兩種方法(轉載)

在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 這兩個庫操作圖片。本人偏愛 matpoltlib,因為它的語法更像 matlab。 一、matplotlib 1. 顯示圖片 1 2 3 4

python實現連續子陣列的最大

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15

python實現一個簡單的thirft客戶端服務端

建立thrift檔案 service Hello { string get() } 使用thrift 建立服務需要的元件 thrift --gen py hello.thrif

python實現——根據txt檔案進行檔案複製並重命名

需求:根據txt檔案中所列檔名及路徑,將這些檔案複製到另外一個資料夾下並重命名,另外,重新生成一份已複製檔案的檔案路徑及檔名列表。 txt檔名:imglist.txt 原檔案所在資料夾:789 目標資料夾:000 新txt檔名:newlist.txt 實現程式碼:

python實現基於單詞級one-hot編碼字元級的one-hot編碼

one-hot編碼是將標記轉換為向量的最常用、最基本的方法。它將每個單詞與一個唯一的整數索引相關聯,然後將這個整數索引 i 轉換為長度為N的二進位制向量(N是詞表大小),這個向量只有第i個元素是1,其餘元素都為0. 單詞級的one-hot編碼 import numpy

深度學習(主要是CNN)用於圖片分類檢測總結

前言: 主要總結一下自己最近看文章和程式碼的心得。 1. CNN用於分類:具體的過程大家都知道,無非是卷積,下采樣,啟用函式,全連線等。CNN用於分類要求它的輸入圖片的大小是固定的(其實不單單是CNN,很多其它的方法也是這樣的),這是它的一個不足之處之一。目前的大部分CNN都是用來做分類比較多。 2.

python實現aes加密解密,RSA簽名驗籤,RSA加密解密,並呼叫介面

用python實現呼叫介面的示例程式碼,過程涉及到很多的加密演算法,值得分享一下。首先公鑰和私鑰如何生成,並且能相容java平臺,嘗試了很多方法。最終決定用openssl命令前提,需要安裝openssl,Crypto庫生成公鑰私鑰對過程:生成私鑰: openssl ge

python實現簡單聊天應用(群聊點對點均實現

後續程式碼更新和功能新增會提交到個人github主頁,有興趣可以一起來完善! 如果只是拿過去執行看結果,請注意平臺相關性以及python版本號,本示例開發執行平臺為win7x86_64 pycharm community,python版本號為3.5!!! T