前言
闲得慌,用pyqt5写的
需求
把一堆文件放在一个文件夹里面,通过正则表达式匹配特定格式的后缀文件,批量修改同类型的文件,修改为一些有规律的名字。
实例
长这样
直接附上代码
(1)UI部分:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'UI.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(854, 409)
self.gridLayout_2 = QtWidgets.QGridLayout(Form)
self.gridLayout_2.setObjectName("gridLayout_2")
self.tabWidget = QtWidgets.QTabWidget(Form)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.gridLayout = QtWidgets.QGridLayout(self.tab)
self.gridLayout.setObjectName("gridLayout")
self.line = QtWidgets.QFrame(self.tab)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.gridLayout.addWidget(self.line, 2, 0, 1, 2)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_3 = QtWidgets.QLabel(self.tab)
self.label_3.setObjectName("label_3")
self.horizontalLayout_3.addWidget(self.label_3)
self.lineEdit_first = QtWidgets.QLineEdit(self.tab)
self.lineEdit_first.setObjectName("lineEdit_first")
self.horizontalLayout_3.addWidget(self.lineEdit_first)
self.label_4 = QtWidgets.QLabel(self.tab)
self.label_4.setObjectName("label_4")
self.horizontalLayout_3.addWidget(self.label_4)
self.lineEdit_second = QtWidgets.QLineEdit(self.tab)
self.lineEdit_second.setObjectName("lineEdit_second")
self.horizontalLayout_3.addWidget(self.lineEdit_second)
self.btn_transform = QtWidgets.QPushButton(self.tab)
self.btn_transform.setObjectName("btn_transform")
self.horizontalLayout_3.addWidget(self.btn_transform)
self.gridLayout.addLayout(self.horizontalLayout_3, 6, 0, 1, 2)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.textBrowser_receive = QtWidgets.QTextBrowser(self.tab)
self.textBrowser_receive.setObjectName("textBrowser_receive")
self.verticalLayout.addWidget(self.textBrowser_receive)
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_8.addItem(spacerItem)
self.label_9 = QtWidgets.QLabel(self.tab)
self.label_9.setObjectName("label_9")
self.horizontalLayout_8.addWidget(self.label_9)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_8.addItem(spacerItem1)
self.verticalLayout.addLayout(self.horizontalLayout_8)
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 2, 1)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.btn_openFile = QtWidgets.QPushButton(self.tab)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btn_openFile.sizePolicy().hasHeightForWidth())
self.btn_openFile.setSizePolicy(sizePolicy)
self.btn_openFile.setObjectName("btn_openFile")
self.horizontalLayout_2.addWidget(self.btn_openFile)
self.label_2 = QtWidgets.QLabel(self.tab)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
self.label_2.setSizePolicy(sizePolicy)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.fontComboBox_selectFormat = QtWidgets.QFontComboBox(self.tab)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(2)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.fontComboBox_selectFormat.sizePolicy().hasHeightForWidth())
self.fontComboBox_selectFormat.setSizePolicy(sizePolicy)
self.fontComboBox_selectFormat.setObjectName("fontComboBox_selectFormat")
self.horizontalLayout_2.addWidget(self.fontComboBox_selectFormat)
self.gridLayout.addLayout(self.horizontalLayout_2, 5, 0, 1, 2)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem2)
self.label_6 = QtWidgets.QLabel(self.tab)
self.label_6.setObjectName("label_6")
self.horizontalLayout_9.addWidget(self.label_6)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem3)
self.gridLayout.addLayout(self.horizontalLayout_9, 1, 1, 1, 1)
self.textBrowser_modify = QtWidgets.QTextBrowser(self.tab)
self.textBrowser_modify.setObjectName("textBrowser_modify")
self.gridLayout.addWidget(self.textBrowser_modify, 0, 1, 1, 1)
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_11.addItem(spacerItem4)
self.label_10 = QtWidgets.QLabel(self.tab)
self.label_10.setObjectName("label_10")
self.horizontalLayout_11.addWidget(self.label_10)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_11.addItem(spacerItem5)
self.gridLayout.addLayout(self.horizontalLayout_11, 3, 0, 1, 2)
self.line_2 = QtWidgets.QFrame(self.tab)
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.gridLayout.addWidget(self.line_2, 4, 0, 1, 2)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.label_7 = QtWidgets.QLabel(self.tab_2)
self.label_7.setGeometry(QtCore.QRect(20, 24, 111, 21))
self.label_7.setObjectName("label_7")
self.label_8 = QtWidgets.QLabel(self.tab_2)
self.label_8.setGeometry(QtCore.QRect(20, 64, 431, 31))
self.label_8.setObjectName("label_8")
self.tabWidget.addTab(self.tab_2, "")
self.gridLayout_2.addWidget(self.tabWidget, 0, 0, 1, 1)
self.retranslateUi(Form)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_3.setText(_translate("Form", "修改名称:"))
self.lineEdit_first.setText(_translate("Form", "这是第"))
self.label_4.setText(_translate("Form", "i"))
self.lineEdit_second.setText(_translate("Form", "个文件"))
self.btn_transform.setText(_translate("Form", "开始转换"))
self.textBrowser_receive.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.label_9.setText(_translate("Form", "转换前"))
self.btn_openFile.setText(_translate("Form", "打开文件"))
self.label_2.setText(_translate("Form", " 文件后缀:"))
self.label_6.setText(_translate("Form", "转换后"))
self.label_10.setText(_translate("Form", "提示:将所有文件放在同一个文件夹中"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "首页"))
self.label_7.setText(_translate("Form", "使用需知:"))
self.label_8.setText(_translate("Form", "该版本暂时只支持png/jpg识别,后续将会更新其他功能"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Form", "需知"))
编辑定义类:
# -*- coding: utf-8 -*-
# @Time : 2021/4/7 00:05
# @Author : Zeeland
# @File : FunEdit.py
# @Software: PyCharm
from UI import Ui_Form
from PyQt5.QtWidgets import QWidget,QApplication,QFileDialog
import sys,os,re
class FunEdit(Ui_Form,QWidget):
def __init__(self):
super(FunEdit, self).__init__()
self.setupUi(self)
self.init()
'''绑定事件'''
def init(self):
self.btn_openFile.clicked.connect(self.openFile)
self.btn_transform.clicked.connect(self.transform)
'''打开文件'''
def openFile(self):
self.file = QFileDialog.getExistingDirectory(self,
"选取文件夹",
"./") # 起始路径
self.fileList = os.listdir(self.file)
for i in self.fileList:
self.textBrowser_receive.append(i)
def anayse(self):
# self.fileList = os.listdir(r"C:\Users\86132\Desktop\here") # 待修改文件夹
print("修改前:" + str(self.fileList))
currentpath = os.getcwd() # 得到进程当前工作目录
os.chdir(self.file) # 将当前工作目录修改为待修改文件夹的位置
num = 1 # 名称变量
for fileName in self.fileList: # 遍历文件夹中所有文件
pat = ".+\.(jpg|png|gif)" # 匹配文件名正则表达式
pattern = re.findall(pat, fileName) # 进行匹配
m1=self.lineEdit_first.text()
m2=self.lineEdit_second.text()
os.rename(fileName, (m1 + str(num) + m2+"." + pattern[0])) # 文件重新命名
# 其中pattern[0]为后缀格式
num = num + 1 # 改变编号,继续下一项
print("---------------------------------------------------")
os.chdir(currentpath) # 改回程序运行前的工作目录
sys.stdin.flush() # 刷新
self.fileList = str(os.listdir(self.file))
print("修改后:" + self.fileList) # 输出修改后文件夹中包含的文件
def transform(self):
self.anayse()
for i in self.fileList:
self.textBrowser_modify.append(i)
'''主方法运行入口'''
if __name__ == '__main__':
app = QApplication(sys.argv)
win = FunEdit()
win.show()
sys.exit(app.exec())
运行效果
额…不知道转换后的为什么输出方式不一样了
但是总的来说问题不大
如果你感觉本文对你有帮助,记得点赞评论收藏转发哦~