1. 程式人生 > 實用技巧 >陶大王的檔案工具(批量新建資料夾、批量修改資料夾名稱、批量修改檔名稱及格式)

陶大王的檔案工具(批量新建資料夾、批量修改資料夾名稱、批量修改檔名稱及格式)

一、 源起

  女友上班有時需要新建多個名稱類似(英文/中文字首+數字字尾)的資料夾,修改某個目錄下所有檔案/資料夾的名稱,修改某個目錄下所有檔案的格式為指定格式,如果直接複製貼上,挨個修改名稱及格式的話確實令人不太愉快,所以想著做一個工具解決一下這個問題。

一、 成果展示

  按著她的要求,簡單操作,頁面簡潔,然後還要有我們的照片做背景,我想好像這要求也不過分,就去找了網上類似的工具介紹,大概知道是要做一個桌面應用,以及應用上應該有的部件。結合自己的背景,最後決定用pycharm+pyqt5做這個工具,做出來差不多是一個41.3M的exe檔案,具體功能展示如下:

2.1批量新建指定名稱(字首+數字+字尾)資料夾

字首和字尾都可以不寫,數字為整數,預設從1開始編號

  

2.2批量修改資料夾名稱為(字首+數字+字尾)的形式

2.3批量修改檔案格式

  此處通過修改檔案字尾名的方式修改其格式,修改名字方式同文件夾。

一、 實現工具

3.1 介面設計工具:qt-designer

視窗及佈局設定主要由anaconda3自帶的qt-designer完成,其位置在anaconda3安裝目錄的:\Library\bin下,在本機的目錄如下:D:\appliment\anaconda3\Library\bin\designer.exe

使用時可以在該目錄下雙擊designer.exe,也可以將該工具加入pycharm的擴充套件工具包中,方便呼叫。Qt-designer介紹及pycharm配置擴充套件工具方法見下方連結,主要參考了前7節課內容:

https://www.bilibili.com/video/BV154411n79k?p=3

3.2程式碼工具:pycharm(帶pyuic、pyrcc)

利用qt-designer製作好佈局後,會生成一個ui檔案,利用pycharm的pyuic擴充套件工具將其轉換為python可執行的py檔案,然後在pycharm中編寫相關程式碼,這時可以在pycharm中執行該程式,並實現相應功能。

如果需要設定背景圖片,則需要先在qt-designer中新增,建議新建一個textEdit,在該textEdit內插入背景圖片,再將所有部件複製貼上到該textEdit內。此時需要新建一個qrc檔案,用來記錄背景圖片的路徑等資訊,利用pycharm中的pyrcc擴充套件工具將該qrc檔案轉換為py檔案,再按上一段的操作進行。

  在pycharm中配置pyuic工具:https://www.bilibili.com/video/BV154411n79k?p=6

  配置pyrcc擴充套件工具的方式和pyuic類似,可以選擇pycharm工作路徑下的pyrcc.exe作為其執行程式(或者anaconda3下的相應路徑),具體引數見如下:

3.3 打包成exe檔案:conda 下執行pyinstaller命令

寫好程式碼後需要在主程式目錄下,開啟conda操作檯(或者cmd終端),執行pyinstaller命令進行打包操作。如果未安裝pyinstaller程式,需要先安裝:pip install pyinstaller,接著執行pyinstaller -F -w -i 圖示路徑 xxx.py

  引數說明:

-F:生成單個可執行檔案

  -w:去掉命令列視窗,在GUI介面時使用效果極好

  -i:指定可執行檔案的應用圖示,圖片格式需要轉換為.ico

  最後可以在當前目錄的dist檔案下找到可執行的exe檔案。這部分詳情可見:https://blog.csdn.net/weixin_44901301/article/details/105964123

  這部分應該也可以在pycharm中利用擴充套件工具完成,但數次嘗試均告失敗,如果有人嘗試成功了,麻煩告知我一下。

四、 主程式程式碼

import sys
import os
from generater import Ui_Form #generater 是ui檔案轉換生成的py檔案
from PyQt5.QtWidgets import QApplication, QMainWindow ,QFileDialog

class mymainform(QMainWindow,Ui_Form):
    def __init__(self):
        super(mymainform,self).__init__()
        self.setupUi(self)
        self.pushButton_3.clicked.connect(self.getdir)
        self.pushButton.clicked.connect(self.createdir)
        self.pushButton_4.clicked.connect(self.modifydir)
        self.pushButton_5.clicked.connect(self.modify_file_name)
        
    def getdir(self):
        directory = QFileDialog.getExistingDirectory(self, "請選擇資料夾路徑", "C:\\Users")
        self.lineEdit_5.setText(directory)

    def modifydir(self):
        path = str(self.lineEdit_5.text())
        path = path.strip()
        if isinstance(self.lineEdit_4.text(),str):
            pre_name = str(self.lineEdit_4.text())
        else:
            pre_name = ""

        if isinstance(self.lineEdit_6.text(),str):
            post_name = str(self.lineEdit_6.text())
        else:
            post_name = ""

        dirs = os.listdir(path)
        if isinstance(self.lineEdit_2.text(),int):
            number = int(self.lineEdit_2.text())
        else:
            number = 1

        showstr = ""
        for dir in dirs:
            oldname = os.path.join(path,dir)
            newname = os.path.join(path,pre_name + str(number) + post_name)
            os.rename(oldname,newname)
            showstr += dir + ", 其名稱已被修改為  " + pre_name + str(number) + post_name + "\n"
            number += 1
        self.textBrowser.setText(showstr)

    def createdir(self):
        pre_name = str(self.lineEdit_4.text())
        post_name = str(self.lineEdit_6.text())
        number_lower = int(self.lineEdit_2.text())
        number_upper = int(self.lineEdit_3.text())
        path = str(self.lineEdit_5.text())
        path = path.strip()
        showstr = ""
        for i in range(number_lower - 1, number_upper):
            file_name = pre_name + str(i + 1) + post_name
            dir_name = path + '/' + file_name
            isExists = file_name in os.listdir(path)
            if not isExists:
                os.makedirs(dir_name)
                showstr += dir_name + ' 建立成功' + "\n"
            else:
                showstr += dir_name + ' 目錄已存在' + "\n"
        self.textBrowser.setText(showstr)
        
    def modify_file_name(self):
        pre_name = str(self.lineEdit_4.text())
        post_name = str(self.lineEdit_6.text())
        path = str(self.lineEdit_5.text())
        path = path.strip()
        if isinstance(self.lineEdit_2.text(), int):
            number = int(self.lineEdit_2.text())
        else:
            number = 1
        file_format = str(self.lineEdit_7.text())
        files = os.listdir(path)
        showstr = ""
        for file in files:
            oldname = os.path.join(os.path.abspath(path), file)
            newname = os.path.join(os.path.abspath(path), pre_name + str(number) + post_name + file_format)
            os.rename(oldname, newname)
            showstr += file + ", 已被修改為  " + pre_name + str(number) + post_name + file_format + "\n"
            number += 1
        self.textBrowser.setText(showstr)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mywin = mymainform()
    mywin.show()
    sys.exit(app.exec_())

五、 參考資源

5.1 pyqt5及pycharm介紹及配置:

https://www.bilibili.com/video/BV154411n79k?p=1

5.2 qt-designer設計佈局時插入背景圖片:

https://blog.csdn.net/yufen9987/article/details/85611711

5.3將py檔案打包成exe檔案:

https://blog.csdn.net/weixin_44901301/article/details/105964123

5.4更加簡潔的批量修改檔案/資料夾名稱的python程式碼:

https://blog.csdn.net/liupeng19970119/article/details/102555418

5.5插入背景圖片後出現ModuleNotFoundError No module named **_rc:

https://blog.csdn.net/qq_42455308/article/details/106865415

5.6應用圖示ico圖示庫:

https://www.iconfont.cn/

5.7圖片格式轉換(如svg格式轉png格式):

https://www.aconvert.com/cn/image/svg-to-png/