文章目录
- 通过两个单选按钮来实现:前者记为radio button,表示批量生成的文件(夹)具有一定的规律性,即label中的提示:文件名称为按顺序排列的数字、字母等(如批量生成100个文件(夹),文件(夹)的名称是1-100),单击后radio button后,会显示出两个line edit,可以分别输入文件(夹)名称的起始值和终止值,而且右边的无规律性提示也会消失; 后者记为radio button2,表示批量生成的文件(夹)不具有一定的规律性,即label中的提示:文件名称可自定义(如批量创建以“刘一”、“陈二”、“张三”、“李四”、“王五”、“赵六”、“孙七”、“周八”、“吴九”、“郑十”……等为名称的文件(夹)),单击radio button2后,会显示出一个text edit,默认值是“刘一”、“陈二”、“张三”、“李四”、“王五”、“赵六”,可以直接将其删去,然后将想要的文件(夹)名称输入(粘贴)到text edit中即可,但要注意写入要求:所有文件名称按行排列(即每行仅有一个文件(夹)名),而且左边的有规律性提示也会消失。
- 默认是批量生成文件夹(也是最常用的),在下拉列表中还包含了文本文档.txt、DOC文档.doc、DOCX文档.docx、PPT演示文稿.ppt、PPTX演示文稿.pptx、XLS工作表.xls、XLSX工作表.xlsx等多种类型。
- 点击“开始生成”按钮,即可秒秒钟批量生成所需所有文件(夹)。当然,这里还放了“退出系统”的按钮,供退出程序。 最后批量产生的文件(夹)如下: 可以看到,产生大量文件(夹)是一瞬间的事儿,哪怕再多都不在话下,也都可以秒秒钟做到(为避免冗余性,批量产生其他文件类型这里就不做演示了)!
- 在第二步选择规律性文件名称时,若输入不符合要求,点击“开始生成”按钮,会有如下提示。
- 最后附上通过pyuic5产生的GUI界面代码jiemian.py: # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ‘jiemian.ui’ # # Created by: PyQt5 UI code generator 5.15.11 # # 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.setEnabled(True) Form.resize(800, 390) Form.setMinimumSize(QtCore.QSize(800, 390)) Form.setMaximumSize(QtCore.QSize(800, 390)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(“:/image1.png”), QtGui.QIcon.Normal, QtGui.QIcon.Off) Form.setWindowIcon(icon) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(40, 70, 201, 21)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(12) font.setBold(False) font.setWeight(50) self.label.setFont(font) self.label.setObjectName(“label”) self.label_4 = QtWidgets.QLabel(Form) self.label_4.setGeometry(QtCore.QRect(40, 320, 261, 21)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(12) font.setBold(False) font.setWeight(50) self.label_4.setFont(font) self.label_4.setObjectName(“label_4”) self.comboBox = QtWidgets.QComboBox(Form) self.comboBox.setGeometry(QtCore.QRect(130, 350, 201, 22)) self.comboBox.setObjectName(“comboBox”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setGeometry(QtCore.QRect(30, 60, 751, 241)) self.groupBox.setAutoFillBackground(False) self.groupBox.setTitle(“”) self.groupBox.setFlat(False) self.groupBox.setObjectName(“groupBox”) self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setGeometry(QtCore.QRect(100, 180, 91, 16)) self.label_3.setObjectName(“label_3”) self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setEnabled(True) self.label_2.setGeometry(QtCore.QRect(100, 120, 91, 16)) self.label_2.setAutoFillBackground(False) self.label_2.setInputMethodHints(QtCore.Qt.ImhNone) self.label_2.setObjectName(“label_2”) self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_2.setGeometry(QtCore.QRect(100, 200, 113, 20)) self.lineEdit_2.setObjectName(“lineEdit_2”) self.lineEdit = QtWidgets.QLineEdit(self.groupBox) self.lineEdit.setGeometry(QtCore.QRect(100, 140, 113, 20)) self.lineEdit.setObjectName(“lineEdit”) self.textEdit = QtWidgets.QTextEdit(self.groupBox) self.textEdit.setGeometry(QtCore.QRect(490, 70, 221, 151)) self.textEdit.setObjectName(“textEdit”) self.label_6 = QtWidgets.QLabel(self.groupBox) self.label_6.setGeometry(QtCore.QRect(70, 80, 221, 31)) self.label_6.setObjectName(“label_6”) self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox) self.radioButton_2.setGeometry(QtCore.QRect(310, 50, 261, 16)) self.radioButton_2.setObjectName(“radioButton_2”) self.radioButton = QtWidgets.QRadioButton(self.groupBox) self.radioButton.setGeometry(QtCore.QRect(50, 50, 171, 16)) self.radioButton.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.radioButton.setObjectName(“radioButton”) self.label_7 = QtWidgets.QLabel(self.groupBox) self.label_7.setGeometry(QtCore.QRect(330, 80, 151, 111)) self.label_7.setObjectName(“label_7”) self.groupBox_3 = QtWidgets.QGroupBox(self.groupBox) self.groupBox_3.setGeometry(QtCore.QRect(40, 40, 241, 191)) self.groupBox_3.setTitle(“”) self.groupBox_3.setObjectName(“groupBox_3”) self.groupBox_4 = QtWidgets.QGroupBox(self.groupBox) self.groupBox_4.setGeometry(QtCore.QRect(300, 40, 431, 191)) self.groupBox_4.setTitle(“”) self.groupBox_4.setObjectName(“groupBox_4”) self.groupBox_4.raise_() self.groupBox_3.raise_() self.label_3.raise_() self.label_2.raise_() self.lineEdit_2.raise_() self.lineEdit.raise_() self.textEdit.raise_() self.label_6.raise_() self.radioButton_2.raise_() self.radioButton.raise_() self.label_7.raise_() self.groupBox_2 = QtWidgets.QGroupBox(Form) self.groupBox_2.setGeometry(QtCore.QRect(30, 310, 321, 71)) self.groupBox_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.groupBox_2.setTitle(“”) self.groupBox_2.setObjectName(“groupBox_2”) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(460, 350, 131, 23)) self.pushButton.setObjectName(“pushButton”) self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(610, 350, 131, 23)) self.pushButton_2.setObjectName(“pushButton_2”) self.label_5 = QtWidgets.QLabel(Form) self.label_5.setGeometry(QtCore.QRect(490, 20, 141, 31)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(16) self.label_5.setFont(font) self.label_5.setObjectName(“label_5”) self.groupBox_5 = QtWidgets.QGroupBox(Form) self.groupBox_5.setGeometry(QtCore.QRect(360, 310, 421, 71)) self.groupBox_5.setTitle(“”) self.groupBox_5.setObjectName(“groupBox_5”) self.label_9 = QtWidgets.QLabel(self.groupBox_5) self.label_9.setGeometry(QtCore.QRect(10, 10, 231, 21)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(12) font.setBold(False) font.setWeight(50) self.label_9.setFont(font) self.label_9.setObjectName(“label_9”) self.label_8 = QtWidgets.QLabel(Form) self.label_8.setGeometry(QtCore.QRect(260, 20, 251, 31)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(18) font.setBold(False) font.setWeight(50) self.label_8.setFont(font) self.label_8.setObjectName(“label_8”) self.label_10 = QtWidgets.QLabel(Form) self.label_10.setGeometry(QtCore.QRect(570, 10, 71, 51)) self.label_10.setText(“”) self.label_10.setPixmap(QtGui.QPixmap(“:/image1.png”)) self.label_10.setObjectName(“label_10”) self.groupBox_5.raise_() self.groupBox_2.raise_() self.groupBox.raise_() self.label.raise_() self.label_4.raise_() self.comboBox.raise_() self.pushButton.raise_() self.pushButton_2.raise_() self.label_5.raise_() self.label_8.raise_() self.label_10.raise_() self.retranslateUi(Form) self.pushButton_2.clicked.connect(Form.close) # type: ignore QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate(“Form”, “Batch_creation”)) self.label.setText(_translate(“Form”, “一、请选择文件名称类型:”)) self.label_4.setText(_translate(“Form”, “二、请选择批量生成的文件类型:”)) self.comboBox.setItemText(0, _translate(“Form”, “文件夹”)) self.comboBox.setItemText(1, _translate(“Form”, “文本文档.txt”)) self.comboBox.setItemText(2, _translate(“Form”, “DOC文档.doc”)) self.comboBox.setItemText(3, _translate(“Form”, “DCOX文档.docx”)) self.comboBox.setItemText(4, _translate(“Form”, “PPT演示文稿.ppt”)) self.comboBox.setItemText(5, _translate(“Form”, “PPTX演示文稿.pptx”)) self.comboBox.setItemText(6, _translate(“Form”, “XLS工作表.xls”)) self.comboBox.setItemText(7, _translate(“Form”, “XLSX工作表.xlsx”)) self.label_3.setText(_translate(“Form”, “请输入终止值:”)) self.label_2.setText(_translate(“Form”, “请输入起始值:”)) self.textEdit.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=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>刘一</p>n” “<p style=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>陈二</p>n” “<p style=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>张三</p>n” “<p style=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>李四</p>n” “<p style=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>王五</p>n” “<p style=” margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;”>赵六</p></body></html>”)) self.label_6.setText(_translate(“Form”, “文件名称为按顺序排列的数字、字母等”)) self.radioButton_2.setText(_translate(“Form”, “文件名称无规律”)) self.radioButton.setText(_translate(“Form”, “文件名称有规律”)) self.label_7.setText(_translate(“Form”, “<html><head/><body><p>文件名称可自定义,</p><p>将所有文件的名称按行排列</p><p>(即每行仅有一个文件名),</p><p>复制粘贴到右框中即可</p></body></html>”)) self.pushButton.setText(_translate(“Form”, “开始生成”)) self.pushButton_2.setText(_translate(“Form”, “退出系统”)) self.label_5.setText(_translate(“Form”, “Designed By”)) self.label_9.setText(_translate(“Form”, “三、请选择以下操作命令:”)) self.label_8.setText(_translate(“Form”, “文件批量生成系统”)) import ziyuan_rc
- import sys,os from jiemian import * from PyQt5.QtWidgets import QApplication, QWidget from docx import Document from pptx import Presentation from openpyxl import Workbook # 保持窗口大小和qtdesigner中的一致 from PyQt5 import QtCore QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) 不懂为啥需要导入Qtcore的,请看一键曝光:Python+PyQt实现的文件目录。
- def __init__(self): super(QWidget, self).__init__() self.setupUi(self) # 初始化设置控件的显示状态 self.label_2.setVisible(False) self.label_3.setVisible(False) self.label_6.setVisible(True) self.label_7.setVisible(True) self.lineEdit.setVisible(False) self.lineEdit_2.setVisible(False) self.textEdit.setVisible(False) # 绑定信号 self.radioButton.clicked.connect(self.guilv_visible) self.radioButton_2.clicked.connect(self.wuguilv_visible) self.pushButton.clicked.connect(self.shengcheng) 因为在步骤二中有radio button和radio button2可供选择,也可在两个单选按钮中进行随意切换,所以为方便后续的随意切换,这里提前进行了visible的设置。
- def guilv_visible(self): # 选择性显示与规律性相关的控件 if (self.radioButton.isChecked()) and (self.radioButton_2.isChecked()==False): self.label_2.setVisible(True) self.label_3.setVisible(True) self.label_6.setVisible(True) self.lineEdit.setVisible(True) self.lineEdit_2.setVisible(True) self.textEdit.setVisible(False) self.label_7.setVisible(False)
- def wuguilv_visible(self): # 选择性显示与无规律性相关的控件 if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()): self.label_2.setVisible(False) self.label_3.setVisible(False) self.label_6.setVisible(False) self.lineEdit.setVisible(False) self.lineEdit_2.setVisible(False) self.textEdit.setVisible(True) self.label_7.setVisible(True)
- def shengcheng(self): if self.radioButton.isChecked(): # 选择的是有规律性 qishizhi = self.lineEdit.text() zhongzhizhi = self.lineEdit_2.text() if (len(qishizhi)==0): QtWidgets.QMessageBox.critical(self,’输入错误’,’请检查起始值是否为空!’) else: if (len(zhongzhizhi)==0): QtWidgets.QMessageBox.critical(self,’输入错误’,’请检查终止值是否为空!’) else: if (qishizhi.isdigit()) and (zhongzhizhi.isdigit()): # 文件名称为数字 if int(qishizhi)>=int(zhongzhizhi): QtWidgets.QMessageBox.critical(self, ‘输入错误’, ‘起始值应小于终止值!’) else: shuzi_list = [] # 数字列表 for i in range(int(qishizhi), int(zhongzhizhi)+1): shuzi_list.append(str(i)) selected_index = self.comboBox.currentIndex() wenjian_shengcheng(selected_index, shuzi_list) QtWidgets.QMessageBox.information(self,’生成成功’,’文件生成成功,请查看!’) elif (qishizhi.isalpha()) and (zhongzhizhi.isalpha()): # 文件名称为字母 zimu_list = [] # 字母列表 if (len(qishizhi)==1) and (len(zhongzhizhi)==1): # 65-90为26个大写英文字母,97-122为26个小写英文字母 qishizhi_ord = ord(qishizhi) zhongzhizhi_ord = ord(zhongzhizhi) if qishizhi_ord >= zhongzhizhi_ord: QtWidgets.QMessageBox.critical(self, ‘输入错误’, ‘起始值应小于终止值!’) else: if (zhongzhizhi_ord – qishizhi_ord) in range(1, 26): for i in range(qishizhi_ord, zhongzhizhi_ord+1): zimu_list.append(chr(i)) selected_index = self.comboBox.currentIndex() wenjian_shengcheng(selected_index, zimu_list) QtWidgets.QMessageBox.information(self,’生成成功’,’文件生成成功,请查看!’) else: QtWidgets.QMessageBox.critical(self, ‘输入错误’, ‘请检查起始值和终止值的大小写类型!’) else: QtWidgets.QMessageBox.critical(self, ‘输入错误’, ‘请检查起始值和终止值是否为单字母!’) else: QtWidgets.QMessageBox.critical(self,’输入错误’,’请检查起始值和终止值的类型是否匹配!’) else: if self.radioButton_2.isChecked(): # 选择的是无规律性 zidingyi = self.textEdit.toPlainText() # 读取的默认类型为str mingcheng_list = zidingyi.split() #以换行符分割 selected_index = self.comboBox.currentIndex() wenjian_shengcheng(selected_index,mingcheng_list) QtWidgets.QMessageBox.information(self,’生成成功’,’文件生成成功,请查看!’) else: # 没有选择任何一种文件类型 QtWidgets.QMessageBox.critical(self,’类 与“开始生成”按钮绑定,主要通过len()判断输入是否为空以及输入字母是否为单字母、通过获取ASCII码来判断起始值和终止值字母大小写不一致的情况以及起始字母小于终止字母的情况。
- def wenjian_shengcheng(suoyin,liebiao): # 产生不同种类的文件 match suoyin: case 0: # 生成文件夹 for i in liebiao: os.makedirs(i, exist_ok=True) case 1: # 生成文本文档txt for i in liebiao: open(i+’.txt’,’w’) case 2: # 生成doc文档 for i in liebiao: doc = Document() doc.save(i+’.doc’) case 3: # 生成docx文档 for i in liebiao: doc = Document() doc.save(i+’.docx’) case 4: # 生成PPT演示文稿 for i in liebiao: prs = Presentation() prs.save(i+’.ppt’) case 5: # 生成PPTX演示文稿 for i in liebiao: prs = Presentation() prs.save(i+’.pptx’) case 6: # 生成xls工作表 for i in liebiao: wb = Workbook() ws = wb.active wb.save(i+’.xls’) case 7: # 生成xlsx工作表 for i in liebiao: wb = Workbook() ws = wb.active wb.save(i+’.xlsx’)
目录
- 一、引言
- 二、GUI界面设计
- 1.第一步:确定被批量创建文件(夹)的名称
- 2.第二步:确定被批量创建的文件类型
- 3.第三步:批量创建所需的所有文件(夹)
- 4.一些使用提示
- 5.界面设计jiemian.py
- 三、主要程序详解
- 1.导入所需模块
- 2.对控件的显示进行初始化设置
- 3.选择性显示与规律性相关的控件
- 4.选择性显示与无规律性相关的控件
- 5.“开始生成”对应的逻辑结构与条件判断
- 6.调用函数,生成文件(夹)
- 四、总程序代码Batch_creation.py
因办公要求,经常需要批量创建各种文件(夹),且文件(夹)名称已被指定(如为全公司/部门所有工作人员创建一个以本人姓名命名的文件夹,用于存放个人相关资料等)。人数少还好说,人数大就是一个稍微复杂的问题了。当然这个问题也可以通过“暴力”的方式解决(具体怎么“暴力”,我就不多赘述了),但是工作效率会大大折扣。所以,为极大提高办公效率,就谋生了这个想法。
使用PyQt5进行界面的搭建,最终界面如下:

通过两个单选按钮来实现:前者记为radio button,表示批量生成的文件(夹)具有一定的规律性,即label中的提示:文件名称为按顺序排列的数字、字母等(如批量生成100个文件(夹),文件(夹)的名称是1-100),单击后radio button后,会显示出两个line edit,可以分别输入文件(夹)名称的起始值和终止值,而且右边的无规律性提示也会消失;

后者记为radio button2,表示批量生成的文件(夹)不具有一定的规律性,即label中的提示:文件名称可自定义(如批量创建以“刘一”、“陈二”、“张三”、“李四”、“王五”、“赵六”、“孙七”、“周八”、“吴九”、“郑十”……等为名称的文件(夹)),单击radio button2后,会显示出一个text edit,默认值是“刘一”、“陈二”、“张三”、“李四”、“王五”、“赵六”,可以直接将其删去,然后将想要的文件(夹)名称输入(粘贴)到text edit中即可,但要注意写入要求:所有文件名称按行排列(即每行仅有一个文件(夹)名),而且左边的有规律性提示也会消失。

默认是批量生成文件夹(也是最常用的),在下拉列表中还包含了文本文档.txt、DOC文档.doc、DOCX文档.docx、PPT演示文稿.ppt、PPTX演示文稿.pptx、XLS工作表.xls、XLSX工作表.xlsx等多种类型。


点击“开始生成”按钮,即可秒秒钟批量生成所需所有文件(夹)。当然,这里还放了“退出系统”的按钮,供退出程序。


最后批量产生的文件(夹)如下:


可以看到,产生大量文件(夹)是一瞬间的事儿,哪怕再多都不在话下,也都可以秒秒钟做到(为避免冗余性,批量产生其他文件类型这里就不做演示了)!
在第二步选择规律性文件名称时,若输入不符合要求,点击“开始生成”按钮,会有如下提示。






最后附上通过pyuic5产生的GUI界面代码jiemian.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'jiemian.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# 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.setEnabled(True)
Form.resize(800, 390)
Form.setMinimumSize(QtCore.QSize(800, 390))
Form.setMaximumSize(QtCore.QSize(800, 390))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Form.setWindowIcon(icon)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(40, 70, 201, 21))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_4 = QtWidgets.QLabel(Form)
self.label_4.setGeometry(QtCore.QRect(40, 320, 261, 21))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.comboBox = QtWidgets.QComboBox(Form)
self.comboBox.setGeometry(QtCore.QRect(130, 350, 201, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(30, 60, 751, 241))
self.groupBox.setAutoFillBackground(False)
self.groupBox.setTitle("")
self.groupBox.setFlat(False)
self.groupBox.setObjectName("groupBox")
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setGeometry(QtCore.QRect(100, 180, 91, 16))
self.label_3.setObjectName("label_3")
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setEnabled(True)
self.label_2.setGeometry(QtCore.QRect(100, 120, 91, 16))
self.label_2.setAutoFillBackground(False)
self.label_2.setInputMethodHints(QtCore.Qt.ImhNone)
self.label_2.setObjectName("label_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_2.setGeometry(QtCore.QRect(100, 200, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setGeometry(QtCore.QRect(100, 140, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.textEdit = QtWidgets.QTextEdit(self.groupBox)
self.textEdit.setGeometry(QtCore.QRect(490, 70, 221, 151))
self.textEdit.setObjectName("textEdit")
self.label_6 = QtWidgets.QLabel(self.groupBox)
self.label_6.setGeometry(QtCore.QRect(70, 80, 221, 31))
self.label_6.setObjectName("label_6")
self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
self.radioButton_2.setGeometry(QtCore.QRect(310, 50, 261, 16))
self.radioButton_2.setObjectName("radioButton_2")
self.radioButton = QtWidgets.QRadioButton(self.groupBox)
self.radioButton.setGeometry(QtCore.QRect(50, 50, 171, 16))
self.radioButton.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.radioButton.setObjectName("radioButton")
self.label_7 = QtWidgets.QLabel(self.groupBox)
self.label_7.setGeometry(QtCore.QRect(330, 80, 151, 111))
self.label_7.setObjectName("label_7")
self.groupBox_3 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_3.setGeometry(QtCore.QRect(40, 40, 241, 191))
self.groupBox_3.setTitle("")
self.groupBox_3.setObjectName("groupBox_3")
self.groupBox_4 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_4.setGeometry(QtCore.QRect(300, 40, 431, 191))
self.groupBox_4.setTitle("")
self.groupBox_4.setObjectName("groupBox_4")
self.groupBox_4.raise_()
self.groupBox_3.raise_()
self.label_3.raise_()
self.label_2.raise_()
self.lineEdit_2.raise_()
self.lineEdit.raise_()
self.textEdit.raise_()
self.label_6.raise_()
self.radioButton_2.raise_()
self.radioButton.raise_()
self.label_7.raise_()
self.groupBox_2 = QtWidgets.QGroupBox(Form)
self.groupBox_2.setGeometry(QtCore.QRect(30, 310, 321, 71))
self.groupBox_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.groupBox_2.setTitle("")
self.groupBox_2.setObjectName("groupBox_2")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(460, 350, 131, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(610, 350, 131, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.label_5 = QtWidgets.QLabel(Form)
self.label_5.setGeometry(QtCore.QRect(490, 20, 141, 31))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(16)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.groupBox_5 = QtWidgets.QGroupBox(Form)
self.groupBox_5.setGeometry(QtCore.QRect(360, 310, 421, 71))
self.groupBox_5.setTitle("")
self.groupBox_5.setObjectName("groupBox_5")
self.label_9 = QtWidgets.QLabel(self.groupBox_5)
self.label_9.setGeometry(QtCore.QRect(10, 10, 231, 21))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_9.setFont(font)
self.label_9.setObjectName("label_9")
self.label_8 = QtWidgets.QLabel(Form)
self.label_8.setGeometry(QtCore.QRect(260, 20, 251, 31))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(18)
font.setBold(False)
font.setWeight(50)
self.label_8.setFont(font)
self.label_8.setObjectName("label_8")
self.label_10 = QtWidgets.QLabel(Form)
self.label_10.setGeometry(QtCore.QRect(570, 10, 71, 51))
self.label_10.setText("")
self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))
self.label_10.setObjectName("label_10")
self.groupBox_5.raise_()
self.groupBox_2.raise_()
self.groupBox.raise_()
self.label.raise_()
self.label_4.raise_()
self.comboBox.raise_()
self.pushButton.raise_()
self.pushButton_2.raise_()
self.label_5.raise_()
self.label_8.raise_()
self.label_10.raise_()
self.retranslateUi(Form)
self.pushButton_2.clicked.connect(Form.close) # type: ignore
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Batch_creation"))
self.label.setText(_translate("Form", "一、请选择文件名称类型:"))
self.label_4.setText(_translate("Form", "二、请选择批量生成的文件类型:"))
self.comboBox.setItemText(0, _translate("Form", "文件夹"))
self.comboBox.setItemText(1, _translate("Form", "文本文档.txt"))
self.comboBox.setItemText(2, _translate("Form", "DOC文档.doc"))
self.comboBox.setItemText(3, _translate("Form", "DCOX文档.docx"))
self.comboBox.setItemText(4, _translate("Form", "PPT演示文稿.ppt"))
self.comboBox.setItemText(5, _translate("Form", "PPTX演示文稿.pptx"))
self.comboBox.setItemText(6, _translate("Form", "XLS工作表.xls"))
self.comboBox.setItemText(7, _translate("Form", "XLSX工作表.xlsx"))
self.label_3.setText(_translate("Form", "请输入终止值:"))
self.label_2.setText(_translate("Form", "请输入起始值:"))
self.textEdit.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=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">刘一</p>n"
"<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">陈二</p>n"
"<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">张三</p>n"
"<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">李四</p>n"
"<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">王五</p>n"
"<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">赵六</p></body></html>"))
self.label_6.setText(_translate("Form", "文件名称为按顺序排列的数字、字母等"))
self.radioButton_2.setText(_translate("Form", "文件名称无规律"))
self.radioButton.setText(_translate("Form", "文件名称有规律"))
self.label_7.setText(_translate("Form", "<html><head/><body><p>文件名称可自定义,</p><p>将所有文件的名称按行排列</p><p>(即每行仅有一个文件名),</p><p>复制粘贴到右框中即可</p></body></html>"))
self.pushButton.setText(_translate("Form", "开始生成"))
self.pushButton_2.setText(_translate("Form", "退出系统"))
self.label_5.setText(_translate("Form", "Designed By"))
self.label_9.setText(_translate("Form", "三、请选择以下操作命令:"))
self.label_8.setText(_translate("Form", "文件批量生成系统"))
import ziyuan_rc
import sys,os
from jiemian import *
from PyQt5.QtWidgets import QApplication, QWidget
from docx import Document
from pptx import Presentation
from openpyxl import Workbook
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
不懂为啥需要导入Qtcore的,请看一键曝光:Python+PyQt实现的文件目录。
def __init__(self):
super(QWidget, self).__init__()
self.setupUi(self)
# 初始化设置控件的显示状态
self.label_2.setVisible(False)
self.label_3.setVisible(False)
self.label_6.setVisible(True)
self.label_7.setVisible(True)
self.lineEdit.setVisible(False)
self.lineEdit_2.setVisible(False)
self.textEdit.setVisible(False)
# 绑定信号
self.radioButton.clicked.connect(self.guilv_visible)
self.radioButton_2.clicked.connect(self.wuguilv_visible)
self.pushButton.clicked.connect(self.shengcheng)
因为在步骤二中有radio button和radio button2可供选择,也可在两个单选按钮中进行随意切换,所以为方便后续的随意切换,这里提前进行了visible的设置。
def guilv_visible(self):
# 选择性显示与规律性相关的控件
if (self.radioButton.isChecked()) and (self.radioButton_2.isChecked()==False):
self.label_2.setVisible(True)
self.label_3.setVisible(True)
self.label_6.setVisible(True)
self.lineEdit.setVisible(True)
self.lineEdit_2.setVisible(True)
self.textEdit.setVisible(False)
self.label_7.setVisible(False)
def wuguilv_visible(self):
# 选择性显示与无规律性相关的控件
if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()):
self.label_2.setVisible(False)
self.label_3.setVisible(False)
self.label_6.setVisible(False)
self.lineEdit.setVisible(False)
self.lineEdit_2.setVisible(False)
self.textEdit.setVisible(True)
self.label_7.setVisible(True)
def shengcheng(self):
if self.radioButton.isChecked(): # 选择的是有规律性
qishizhi = self.lineEdit.text()
zhongzhizhi = self.lineEdit_2.text()
if (len(qishizhi)==0):
QtWidgets.QMessageBox.critical(self,'输入错误','请检查起始值是否为空!')
else:
if (len(zhongzhizhi)==0):
QtWidgets.QMessageBox.critical(self,'输入错误','请检查终止值是否为空!')
else:
if (qishizhi.isdigit()) and (zhongzhizhi.isdigit()): # 文件名称为数字
if int(qishizhi)>=int(zhongzhizhi):
QtWidgets.QMessageBox.critical(self, '输入错误', '起始值应小于终止值!')
else:
shuzi_list = [] # 数字列表
for i in range(int(qishizhi), int(zhongzhizhi)+1):
shuzi_list.append(str(i))
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index, shuzi_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
elif (qishizhi.isalpha()) and (zhongzhizhi.isalpha()): # 文件名称为字母
zimu_list = [] # 字母列表
if (len(qishizhi)==1) and (len(zhongzhizhi)==1):
# 65-90为26个大写英文字母,97-122为26个小写英文字母
qishizhi_ord = ord(qishizhi)
zhongzhizhi_ord = ord(zhongzhizhi)
if qishizhi_ord >= zhongzhizhi_ord:
QtWidgets.QMessageBox.critical(self, '输入错误', '起始值应小于终止值!')
else:
if (zhongzhizhi_ord - qishizhi_ord) in range(1, 26):
for i in range(qishizhi_ord, zhongzhizhi_ord+1):
zimu_list.append(chr(i))
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index, zimu_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
else:
QtWidgets.QMessageBox.critical(self, '输入错误', '请检查起始值和终止值的大小写类型!')
else:
QtWidgets.QMessageBox.critical(self, '输入错误', '请检查起始值和终止值是否为单字母!')
else:
QtWidgets.QMessageBox.critical(self,'输入错误','请检查起始值和终止值的类型是否匹配!')
else:
if self.radioButton_2.isChecked(): # 选择的是无规律性
zidingyi = self.textEdit.toPlainText() # 读取的默认类型为str
mingcheng_list = zidingyi.split() #以换行符分割
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index,mingcheng_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
else: # 没有选择任何一种文件类型
QtWidgets.QMessageBox.critical(self,'类
与“开始生成”按钮绑定,主要通过len()判断输入是否为空以及输入字母是否为单字母、通过获取ASCII码来判断起始值和终止值字母大小写不一致的情况以及起始字母小于终止字母的情况。
def wenjian_shengcheng(suoyin,liebiao):
# 产生不同种类的文件
match suoyin:
case 0: # 生成文件夹
for i in liebiao:
os.makedirs(i, exist_ok=True)
case 1: # 生成文本文档txt
for i in liebiao:
open(i+'.txt','w')
case 2: # 生成doc文档
for i in liebiao:
doc = Document()
doc.save(i+'.doc')
case 3: # 生成docx文档
for i in liebiao:
doc = Document()
doc.save(i+'.docx')
case 4: # 生成PPT演示文稿
for i in liebiao:
prs = Presentation()
prs.save(i+'.ppt')
case 5: # 生成PPTX演示文稿
for i in liebiao:
prs = Presentation()
prs.save(i+'.pptx')
case 6: # 生成xls工作表
for i in liebiao:
wb = Workbook()
ws = wb.active
wb.save(i+'.xls')
case 7: # 生成xlsx工作表
for i in liebiao:
wb = Workbook()
ws = wb.active
wb.save(i+'.xlsx')
import sys,os
from jiemian import *
from PyQt5.QtWidgets import QApplication, QWidget
from docx import Document
from pptx import Presentation
from openpyxl import Workbook
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
class login_interface(QWidget, Ui_Form):
def __init__(self):
super(QWidget, self).__init__()
self.setupUi(self)
# 初始化设置控件的显示状态
self.label_2.setVisible(False)
self.label_3.setVisible(False)
self.label_6.setVisible(True)
self.label_7.setVisible(True)
self.lineEdit.setVisible(False)
self.lineEdit_2.setVisible(False)
self.textEdit.setVisible(False)
# 绑定信号
self.radioButton.clicked.connect(self.guilv_visible)
self.radioButton_2.clicked.connect(self.wuguilv_visible)
self.pushButton.clicked.connect(self.shengcheng)
def guilv_visible(self):
# 选择性显示与规律性相关的控件
if (self.radioButton.isChecked()) and (self.radioButton_2.isChecked()==False):
self.label_2.setVisible(True)
self.label_3.setVisible(True)
self.label_6.setVisible(True)
self.lineEdit.setVisible(True)
self.lineEdit_2.setVisible(True)
self.textEdit.setVisible(False)
self.label_7.setVisible(False)
def wuguilv_visible(self):
# 选择性显示与无规律性相关的控件
if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()):
self.label_2.setVisible(False)
self.label_3.setVisible(False)
self.label_6.setVisible(False)
self.lineEdit.setVisible(False)
self.lineEdit_2.setVisible(False)
self.textEdit.setVisible(True)
self.label_7.setVisible(True)
def shengcheng(self):
if self.radioButton.isChecked(): # 选择的是有规律性
qishizhi = self.lineEdit.text()
zhongzhizhi = self.lineEdit_2.text()
if (len(qishizhi)==0):
QtWidgets.QMessageBox.critical(self,'输入错误','请检查起始值是否为空!')
else:
if (len(zhongzhizhi)==0):
QtWidgets.QMessageBox.critical(self,'输入错误','请检查终止值是否为空!')
else:
if (qishizhi.isdigit()) and (zhongzhizhi.isdigit()): # 文件名称为数字
if int(qishizhi)>=int(zhongzhizhi):
QtWidgets.QMessageBox.critical(self, '输入错误', '起始值应小于终止值!')
else:
shuzi_list = [] # 数字列表
for i in range(int(qishizhi), int(zhongzhizhi)+1):
shuzi_list.append(str(i))
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index, shuzi_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
elif (qishizhi.isalpha()) and (zhongzhizhi.isalpha()): # 文件名称为字母
zimu_list = [] # 字母列表
if (len(qishizhi)==1) and (len(zhongzhizhi)==1):
# 65-90为26个大写英文字母,97-122为26个小写英文字母
qishizhi_ord = ord(qishizhi)
zhongzhizhi_ord = ord(zhongzhizhi)
if qishizhi_ord >= zhongzhizhi_ord:
QtWidgets.QMessageBox.critical(self, '输入错误', '起始值应小于终止值!')
else:
if (zhongzhizhi_ord - qishizhi_ord) in range(1, 26):
for i in range(qishizhi_ord, zhongzhizhi_ord+1):
zimu_list.append(chr(i))
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index, zimu_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
else:
QtWidgets.QMessageBox.critical(self, '输入错误', '请检查起始值和终止值的大小写类型!')
else:
QtWidgets.QMessageBox.critical(self, '输入错误', '请检查起始值和终止值是否为单字母!')
else:
QtWidgets.QMessageBox.critical(self,'输入错误','请检查起始值和终止值的类型是否匹配!')
else:
if self.radioButton_2.isChecked(): # 选择的是无规律性
zidingyi = self.textEdit.toPlainText() # 读取的默认类型为str
mingcheng_list = zidingyi.split() #以换行符分割
selected_index = self.comboBox.currentIndex()
wenjian_shengcheng(selected_index,mingcheng_list)
QtWidgets.QMessageBox.information(self,'生成成功','文件生成成功,请查看!')
else: # 没有选择任何一种文件类型
QtWidgets.QMessageBox.critical(self,'类型错误','请选择一个文件名称类型!')
def wenjian_shengcheng(suoyin,liebiao):
# 产生不同种类的文件
match suoyin:
case 0: # 生成文件夹
for i in liebiao:
os.makedirs(i, exist_ok=True)
case 1: # 生成文本文档txt
for i in liebiao:
open(i+'.txt','w')
case 2: # 生成doc文档
for i in liebiao:
doc = Document()
doc.save(i+'.doc')
case 3: # 生成docx文档
for i in liebiao:
doc = Document()
doc.save(i+'.docx')
case 4: # 生成PPT演示文稿
for i in liebiao:
prs = Presentation()
prs.save(i+'.ppt')
case 5: # 生成PPTX演示文稿
for i in liebiao:
prs = Presentation()
prs.save(i+'.pptx')
case 6: # 生成xls工作表
for i in liebiao:
wb = Workbook()
ws = wb.active
wb.save(i+'.xls')
case 7: # 生成xlsx工作表
for i in liebiao:
wb = Workbook()
ws = wb.active
wb.save(i+'.xlsx')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = login_interface()
w.show()
sys.exit(app.exec_())
以上就是Python+PyQt实现指定名称文件批量生成器的详细内容,更多关于Python批量生成文件名的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- Python如何实现自动生成指定文件名并自定义后缀名
- Python3.7 读取音频根据文件名生成脚本的代码
- python+os根据文件名自动生成文本
- python读取文件名称生成list的方法
- Python中提取文件名扩展名的多种方法实现
- 通过Python实现批量修改文件名前后缀功能