Python+PyQt实现一键生成文件目录

作者:

文章目录
  • 因办公要求,经常需要统计“底层人员”上交的各种文件,人数少还好说,人多就是一个稍微复杂的问题了。当然这个问题也可以通过“暴 力”的方式解决,但是工作效率会大大折扣。所以,为极大提高办公效率,就谋生了这个想法。
  • 使用PyQt5进行界面的搭建,最终界面如下: 1.第一步:确定被读取文件所在的文件夹。 2.第二步:确定最终读取结果是否需要保留其文件类型(即后缀)。可根据个人需求而定,以我的工作经验来说,第二种“不保留”是最常见的,即只获取文件名称。 3.第三步:选择最终读取结果存放的文件类型,下拉列表中包含了最常用的五种文件类型:txt文本文件、.doc文档、.docx文档、.xls工作表和.xlsx工作表(如下图所示)。若跳过此步骤,默认保存文件类型为txt文本文件。 4.最后单击“开始读取”按钮,即可成功获取当前目录下所有文件的名称并存储在步骤三所选的文件类型中。若还想继续读取其他文件名称,从步骤一开始重复即可;否则,单击“退出系统”即可退出程序即可。 最后附上通过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(460, 500) Form.setMinimumSize(QtCore.QSize(460, 500)) Form.setMaximumSize(QtCore.QSize(460, 500)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(“:/image1.png”), QtGui.QIcon.Normal, QtGui.QIcon.Off) Form.setWindowIcon(icon) self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setGeometry(QtCore.QRect(40, 180, 381, 61)) self.groupBox.setAutoFillBackground(False) self.groupBox.setTitle(“”) self.groupBox.setFlat(False) self.groupBox.setObjectName(“groupBox”) self.radioButton = QtWidgets.QRadioButton(self.groupBox) self.radioButton.setGeometry(QtCore.QRect(90, 40, 81, 16)) self.radioButton.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.radioButton.setObjectName(“radioButton”) self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setGeometry(QtCore.QRect(20, 10, 281, 21)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(12) font.setBold(False) font.setWeight(50) self.label_2.setFont(font) self.label_2.setObjectName(“label_2”) self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox) self.radioButton_2.setGeometry(QtCore.QRect(200, 40, 81, 16)) self.radioButton_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.radioButton_2.setObjectName(“radioButton_2”) self.label = QtWidgets.QLabel(self.groupBox) self.label.setGeometry(QtCore.QRect(290, 0, 201, 41)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(20) font.setBold(False) font.setWeight(50) self.label.setFont(font) self.label.setObjectName(“label”) self.groupBox_2 = QtWidgets.QGroupBox(Form) self.groupBox_2.setGeometry(QtCore.QRect(40, 270, 381, 71)) self.groupBox_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) self.groupBox_2.setTitle(“”) self.groupBox_2.setObjectName(“groupBox_2”) self.label_4 = QtWidgets.QLabel(self.groupBox_2) self.label_4.setGeometry(QtCore.QRect(20, 10, 311, 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(self.groupBox_2) self.comboBox.setGeometry(QtCore.QRect(60, 40, 261, 22)) self.comboBox.setObjectName(“comboBox”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.comboBox.addItem(“”) self.label_5 = QtWidgets.QLabel(Form) self.label_5.setGeometry(QtCore.QRect(270, 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(40, 370, 381, 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(20, 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.pushButton_2 = QtWidgets.QPushButton(self.groupBox_5) self.pushButton_2.setGeometry(QtCore.QRect(200, 40, 121, 23)) self.pushButton_2.setObjectName(“pushButton_2”) self.pushButton = QtWidgets.QPushButton(self.groupBox_5) self.pushButton.setGeometry(QtCore.QRect(60, 40, 121, 23)) self.pushButton.setObjectName(“pushButton”) self.label_8 = QtWidgets.QLabel(Form) self.label_8.setGeometry(QtCore.QRect(50, 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(350, 10, 71, 51)) self.label_10.setText(“”) self.label_10.setPixmap(QtGui.QPixmap(“:/image1.png”)) self.label_10.setObjectName(“label_10”) self.label_6 = QtWidgets.QLabel(Form) self.label_6.setGeometry(QtCore.QRect(60, 90, 311, 21)) font = QtGui.QFont() font.setFamily(“Adobe Arabic”) font.setPointSize(12) font.setBold(False) font.setWeight(50) self.label_6.setFont(font) self.label_6.setObjectName(“label_6”) self.pushButton_3 = QtWidgets.QPushButton(Form) self.pushButton_3.setGeometry(QtCore.QRect(100, 120, 261, 23)) self.pushButton_3.setObjectName(“pushButton_3”) self.groupBox_3 = QtWidgets.QGroupBox(Form) self.groupBox_3.setGeometry(QtCore.QRect(40, 80, 381, 80)) self.groupBox_3.setTitle(“”) self.groupBox_3.setObjectName(“groupBox_3”) self.groupBox_3.raise_() self.groupBox_5.raise_() self.groupBox_2.raise_() self.groupBox.raise_() self.label_5.raise_() self.label_8.raise_() self.label_10.raise_() self.label_6.raise_() self.pushButton_3.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”, “Read_file”)) self.radioButton.setText(_translate(“Form”, “保留”)) self.label_2.setText(_translate(“Form”, “二、文件名称是否需要保留其类型后缀”)) self.radioButton_2.setText(_translate(“Form”, “不保留”)) self.label.setText(_translate(“Form”, “(.XXX):”)) self.label_4.setText(_translate(“Form”, “三、请选择获取结果最终存放的文件类型:”)) self.comboBox.setItemText(0, _translate(“Form”, “文本文档.txt”)) self.comboBox.setItemText(1, _translate(“Form”, “DOC文档.doc”)) self.comboBox.setItemText(2, _translate(“Form”, “DCOX文档.docx”)) self.comboBox.setItemText(3, _translate(“Form”, “XLS工作表.xls”)) self.comboBox.setItemText(4, _translate(“Form”, “XLSX工作表.xlsx”)) self.label_5.setText(_translate(“Form”, “Designed By”)) self.label_9.setText(_translate(“Form”, “四、请选择以下操作命令:”)) self.pushButton_2.setText(_translate(“Form”, “退出系统”)) self.pushButton.setText(_translate(“Form”, “开始读取”)) self.label_8.setText(_translate(“Form”, “文件名称获取系统”)) self.label_6.setText(_translate(“Form”, “一、请选择待获取文件所在的文件夹:”)) self.pushButton_3.setText(_translate(“Form”, “点击选择待读取文件所在的文件夹”)) import ziyuan_rc //用于个人logo或图标显示,可根据个人需求设置,也可注掉
  • import sys,os from jiemian import * from PyQt5.QtWidgets import QApplication, QWidget from docx import Document 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.radioButton.clicked.connect(self.xuanze) self.radioButton_2.clicked.connect(self.xuanze) self.pushButton.clicked.connect(self.shengcheng) self.pushButton_3.clicked.connect(self.lujing) self.result_list = [] # 在__init__构造函数中定义,通过self关键字访问,每个实例拥有独立副本 self.path = “” self.lujing_flag = False def lujing(self): filepath = QtWidgets.QFileDialog.getExistingDirectory(self, “选取存放待读取文件的文件夹”) # 获取文件夹的路径 if filepath: self.path = filepath self.lujing_flag = True def xuanze(self): filelist = os.listdir(self.path) if self.radioButton.isChecked(): # 保留后缀 self.result_list = filelist else: if self.radioButton_2.isChecked(): # 去掉待命名文件的格式后缀 baoliu_list = [] # 存放最终读取结果 for filename in filelist: for zifu in filename: if zifu == “.”: dian_suoyin = filename.index(zifu) baoliu_list.append(filename[:dian_suoyin]) break self.result_list = baoliu_list def shengcheng(self): if self.lujing_flag == True: if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()==False): QtWidgets.QMessageBox.critical(self, ‘提示’, ‘请完成步骤二!’) else: selected_index = self.comboBox.currentIndex() wenjian_shengcheng(selected_index, self.result_list) QtWidgets.QMessageBox.information(self, ‘成功’, ‘文件名称读取结果保存在当前目录下,请查看!’) else: QtWidgets.QMessageBox.critical(self, ‘提示’, ‘请完成步骤一!’) def wenjian_shengcheng(suoyin, content): name = “read_result” # 产生不同种类的文件 match suoyin: case 0: # 生成文本文档txt with open(name+’.txt’,’w’) as f: for item in content: f.write(f”{item}n”) case 1: # 生成doc文档 doc = Document() for item in content: paragraph = doc.add_paragraph(item) doc.save(name+’.doc’) case 2: # 生成docx文档 doc = Document() for item in content: paragraph = doc.add_paragraph(item) doc.save(name+’.docx’) case 3: # 生成xls工作表 wb = Workbook() ws = wb.active for row in range(1, len(content) + 1): ws.cell(row=row, column=1, value=content[row – 1]) wb.save(name+’.xls’) case 4: # 生成xlsx工作表 wb = Workbook() ws = wb.active for row in range(1, len(content) + 1): ws.cell(row=row, column=1, value=content[row – 1]) wb.save(name+’.xlsx’) if __name__ == ‘__main__’: app = QApplication(sys.argv) w = login_interface() w.show() sys.exit(app.exec_()) 到此这篇关于Python+PyQt实现一键生成文件目录的文章就介绍到这了,更多相关Python生成文件目录内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 基于Python实现一个目录/文件递归检索工具 Python中os.listdir() 获取指定目录中的文件和子目录的列表 Python实现复制文件从一个目录到另外一个目录 python获取当前文件和目录路径的方法详解 python删除指定目录下的文件和文件夹的实现 Python获取当前目录下所有文件的6种方法总结
  • 目录
    • 一、引言
    • 二、GUI界面设计
    • 三、程序详解
      • 1.导入所需模块
      • 2.调整窗口大小
      • 3.弹出选择文件路径对话框
      • 4.对后缀的处理
      • 5.写入并生成存储文件
    • 四、总程序代码Read_file.py

      因办公要求,经常需要统计“底层人员”上交的各种文件,人数少还好说,人多就是一个稍微复杂的问题了。当然这个问题也可以通过“暴 力”的方式解决,但是工作效率会大大折扣。所以,为极大提高办公效率,就谋生了这个想法。

      使用PyQt5进行界面的搭建,最终界面如下:

      1.第一步:确定被读取文件所在的文件夹。

      2.第二步:确定最终读取结果是否需要保留其文件类型(即后缀)。可根据个人需求而定,以我的工作经验来说,第二种“不保留”是最常见的,即只获取文件名称。

      3.第三步:选择最终读取结果存放的文件类型,下拉列表中包含了最常用的五种文件类型:txt文本文件、.doc文档、.docx文档、.xls工作表和.xlsx工作表(如下图所示)。若跳过此步骤,默认保存文件类型为txt文本文件。

      4.最后单击“开始读取”按钮,即可成功获取当前目录下所有文件的名称并存储在步骤三所选的文件类型中。若还想继续读取其他文件名称,从步骤一开始重复即可;否则,单击“退出系统”即可退出程序即可。

      最后附上通过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(460, 500)
              Form.setMinimumSize(QtCore.QSize(460, 500))
              Form.setMaximumSize(QtCore.QSize(460, 500))
              icon = QtGui.QIcon()
              icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
              Form.setWindowIcon(icon)
              self.groupBox = QtWidgets.QGroupBox(Form)
              self.groupBox.setGeometry(QtCore.QRect(40, 180, 381, 61))
              self.groupBox.setAutoFillBackground(False)
              self.groupBox.setTitle("")
              self.groupBox.setFlat(False)
              self.groupBox.setObjectName("groupBox")
              self.radioButton = QtWidgets.QRadioButton(self.groupBox)
              self.radioButton.setGeometry(QtCore.QRect(90, 40, 81, 16))
              self.radioButton.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
              self.radioButton.setObjectName("radioButton")
              self.label_2 = QtWidgets.QLabel(self.groupBox)
              self.label_2.setGeometry(QtCore.QRect(20, 10, 281, 21))
              font = QtGui.QFont()
              font.setFamily("Adobe Arabic")
              font.setPointSize(12)
              font.setBold(False)
              font.setWeight(50)
              self.label_2.setFont(font)
              self.label_2.setObjectName("label_2")
              self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
              self.radioButton_2.setGeometry(QtCore.QRect(200, 40, 81, 16))
              self.radioButton_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
              self.radioButton_2.setObjectName("radioButton_2")
              self.label = QtWidgets.QLabel(self.groupBox)
              self.label.setGeometry(QtCore.QRect(290, 0, 201, 41))
              font = QtGui.QFont()
              font.setFamily("Adobe Arabic")
              font.setPointSize(20)
              font.setBold(False)
              font.setWeight(50)
              self.label.setFont(font)
              self.label.setObjectName("label")
              self.groupBox_2 = QtWidgets.QGroupBox(Form)
              self.groupBox_2.setGeometry(QtCore.QRect(40, 270, 381, 71))
              self.groupBox_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
              self.groupBox_2.setTitle("")
              self.groupBox_2.setObjectName("groupBox_2")
              self.label_4 = QtWidgets.QLabel(self.groupBox_2)
              self.label_4.setGeometry(QtCore.QRect(20, 10, 311, 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(self.groupBox_2)
              self.comboBox.setGeometry(QtCore.QRect(60, 40, 261, 22))
              self.comboBox.setObjectName("comboBox")
              self.comboBox.addItem("")
              self.comboBox.addItem("")
              self.comboBox.addItem("")
              self.comboBox.addItem("")
              self.comboBox.addItem("")
              self.label_5 = QtWidgets.QLabel(Form)
              self.label_5.setGeometry(QtCore.QRect(270, 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(40, 370, 381, 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(20, 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.pushButton_2 = QtWidgets.QPushButton(self.groupBox_5)
              self.pushButton_2.setGeometry(QtCore.QRect(200, 40, 121, 23))
              self.pushButton_2.setObjectName("pushButton_2")
              self.pushButton = QtWidgets.QPushButton(self.groupBox_5)
              self.pushButton.setGeometry(QtCore.QRect(60, 40, 121, 23))
              self.pushButton.setObjectName("pushButton")
              self.label_8 = QtWidgets.QLabel(Form)
              self.label_8.setGeometry(QtCore.QRect(50, 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(350, 10, 71, 51))
              self.label_10.setText("")
              self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))
              self.label_10.setObjectName("label_10")
              self.label_6 = QtWidgets.QLabel(Form)
              self.label_6.setGeometry(QtCore.QRect(60, 90, 311, 21))
              font = QtGui.QFont()
              font.setFamily("Adobe Arabic")
              font.setPointSize(12)
              font.setBold(False)
              font.setWeight(50)
              self.label_6.setFont(font)
              self.label_6.setObjectName("label_6")
              self.pushButton_3 = QtWidgets.QPushButton(Form)
              self.pushButton_3.setGeometry(QtCore.QRect(100, 120, 261, 23))
              self.pushButton_3.setObjectName("pushButton_3")
              self.groupBox_3 = QtWidgets.QGroupBox(Form)
              self.groupBox_3.setGeometry(QtCore.QRect(40, 80, 381, 80))
              self.groupBox_3.setTitle("")
              self.groupBox_3.setObjectName("groupBox_3")
              self.groupBox_3.raise_()
              self.groupBox_5.raise_()
              self.groupBox_2.raise_()
              self.groupBox.raise_()
              self.label_5.raise_()
              self.label_8.raise_()
              self.label_10.raise_()
              self.label_6.raise_()
              self.pushButton_3.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", "Read_file"))
              self.radioButton.setText(_translate("Form", "保留"))
              self.label_2.setText(_translate("Form", "二、文件名称是否需要保留其类型后缀"))
              self.radioButton_2.setText(_translate("Form", "不保留"))
              self.label.setText(_translate("Form", "(.XXX):"))
              self.label_4.setText(_translate("Form", "三、请选择获取结果最终存放的文件类型:"))
              self.comboBox.setItemText(0, _translate("Form", "文本文档.txt"))
              self.comboBox.setItemText(1, _translate("Form", "DOC文档.doc"))
              self.comboBox.setItemText(2, _translate("Form", "DCOX文档.docx"))
              self.comboBox.setItemText(3, _translate("Form", "XLS工作表.xls"))
              self.comboBox.setItemText(4, _translate("Form", "XLSX工作表.xlsx"))
              self.label_5.setText(_translate("Form", "Designed By"))
              self.label_9.setText(_translate("Form", "四、请选择以下操作命令:"))
              self.pushButton_2.setText(_translate("Form", "退出系统"))
              self.pushButton.setText(_translate("Form", "开始读取"))
              self.label_8.setText(_translate("Form", "文件名称获取系统"))
              self.label_6.setText(_translate("Form", "一、请选择待获取文件所在的文件夹:"))
              self.pushButton_3.setText(_translate("Form", "点击选择待读取文件所在的文件夹"))
      import ziyuan_rc //用于个人logo或图标显示,可根据个人需求设置,也可注掉
      

      import sys,os
      from jiemian import *
      from PyQt5.QtWidgets import QApplication, QWidget
      
      from docx import Document
      from openpyxl import Workbook

      # 保持窗口大小和qtdesigner中的一致
      from PyQt5 import QtCore
      QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

      这一步要额外注意:当在pyqt5中的设计界面与使用pyuic生成的界面大小不一致时,需要导入Qtcore模块实现自适应缩放。

      设计界面

      生成界面

      加上上述代码后,两者才会变得一致。

      def lujing(self):
          filepath = QtWidgets.QFileDialog.getExistingDirectory(self, "选取存放待读取文件的文件夹")  # 获取文件夹的路径
          if filepath:
              self.path = filepath
              self.lujing_flag = True

      此def对应着步骤一。最后设立一个标志位lujing_flag,以此来判断操作者是否完成了步骤一(后续会用到)。

      对话框效果如下:

      def xuanze(self):
          filelist = os.listdir(self.path)
          if self.radioButton.isChecked(): # 保留后缀
              self.result_list = filelist
          else:
              if self.radioButton_2.isChecked():
                  # 去掉待命名文件的格式后缀
                  baoliu_list = []  # 存放最终读取结果
                  for filename in filelist:
                      for zifu in filename:
                          if zifu == ".":
                              dian_suoyin = filename.index(zifu)
                              baoliu_list.append(filename[:dian_suoyin])
                              break
                  self.result_list = baoliu_list

      如果用户选择的是保留后缀,则将filelist的内容赋给result_list;否则,通过循环定位后缀标识符“.”在对应文件名中的索引,利用此索引对此文件名依次切片,最终获得纯文件名(不保留后缀)。

      def shengcheng(self):
          if self.lujing_flag == True:
              if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()==False):
                  QtWidgets.QMessageBox.critical(self, '提示', '请完成步骤二!')
              else:
                  selected_index = self.comboBox.currentIndex()
                  wenjian_shengcheng(selected_index, self.result_list)
                  QtWidgets.QMessageBox.information(self, '成功', '文件名称读取结果保存在当前目录下,请查看!')
          else:
              QtWidgets.QMessageBox.critical(self, '提示', '请完成步骤一!')

      依次对步骤完成情况进行判断,并通过自定义函数wenjian_shengcheng写入并生成文件。

      自定义函数wenjian_shengcheng如下:

      def wenjian_shengcheng(suoyin, content):
          name = "read_result"
          # 产生不同种类的文件
          match suoyin:
              case 0: # 生成文本文档txt
                  with open(name+'.txt','w') as f:
                      for item in content:
                          f.write(f"{item}n")
              case 1: # 生成doc文档
                  doc = Document()
                  for item in content:
                      paragraph = doc.add_paragraph(item)
                  doc.save(name+'.doc')
              case 2: # 生成docx文档
                  doc = Document()
                  for item in content:
                      paragraph = doc.add_paragraph(item)
                  doc.save(name+'.docx')
              case 3: # 生成xls工作表
                  wb = Workbook()
                  ws = wb.active
                  for row in range(1, len(content) + 1):
                      ws.cell(row=row, column=1, value=content[row - 1])
                  wb.save(name+'.xls')
              case 4: # 生成xlsx工作表
                  wb = Workbook()
                  ws = wb.active
                  for row in range(1, len(content) + 1):
                      ws.cell(row=row, column=1, value=content[row - 1])
                  wb.save(name+'.xlsx')

      import sys,os
      from jiemian import *
      from PyQt5.QtWidgets import QApplication, QWidget
      
      from docx import Document
      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.radioButton.clicked.connect(self.xuanze)
              self.radioButton_2.clicked.connect(self.xuanze)
              self.pushButton.clicked.connect(self.shengcheng)
              self.pushButton_3.clicked.connect(self.lujing)
      
              self.result_list = [] # 在__init__构造函数中定义,通过self关键字访问,每个实例拥有独立副本
              self.path = ""
      
              self.lujing_flag = False
      
          def lujing(self):
              filepath = QtWidgets.QFileDialog.getExistingDirectory(self, "选取存放待读取文件的文件夹")  # 获取文件夹的路径
              if filepath:
                  self.path = filepath
                  self.lujing_flag = True
      
          def xuanze(self):
              filelist = os.listdir(self.path)
              if self.radioButton.isChecked(): # 保留后缀
                  self.result_list = filelist
              else:
                  if self.radioButton_2.isChecked():
                      # 去掉待命名文件的格式后缀
                      baoliu_list = []  # 存放最终读取结果
                      for filename in filelist:
                          for zifu in filename:
                              if zifu == ".":
                                  dian_suoyin = filename.index(zifu)
                                  baoliu_list.append(filename[:dian_suoyin])
                                  break
                      self.result_list = baoliu_list
      
          def shengcheng(self):
              if self.lujing_flag == True:
                  if (self.radioButton.isChecked()==False) and (self.radioButton_2.isChecked()==False):
                      QtWidgets.QMessageBox.critical(self, '提示', '请完成步骤二!')
                  else:
                      selected_index = self.comboBox.currentIndex()
                      wenjian_shengcheng(selected_index, self.result_list)
                      QtWidgets.QMessageBox.information(self, '成功', '文件名称读取结果保存在当前目录下,请查看!')
              else:
                  QtWidgets.QMessageBox.critical(self, '提示', '请完成步骤一!')
      
      def wenjian_shengcheng(suoyin, content):
          name = "read_result"
          # 产生不同种类的文件
          match suoyin:
              case 0: # 生成文本文档txt
                  with open(name+'.txt','w') as f:
                      for item in content:
                          f.write(f"{item}n")
              case 1: # 生成doc文档
                  doc = Document()
                  for item in content:
                      paragraph = doc.add_paragraph(item)
                  doc.save(name+'.doc')
              case 2: # 生成docx文档
                  doc = Document()
                  for item in content:
                      paragraph = doc.add_paragraph(item)
                  doc.save(name+'.docx')
              case 3: # 生成xls工作表
                  wb = Workbook()
                  ws = wb.active
                  for row in range(1, len(content) + 1):
                      ws.cell(row=row, column=1, value=content[row - 1])
                  wb.save(name+'.xls')
              case 4: # 生成xlsx工作表
                  wb = Workbook()
                  ws = wb.active
                  for row in range(1, len(content) + 1):
                      ws.cell(row=row, column=1, value=content[row - 1])
                  wb.save(name+'.xlsx')
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = login_interface()
          w.show()
          sys.exit(app.exec_())
      

      到此这篇关于Python+PyQt实现一键生成文件目录的文章就介绍到这了,更多相关Python生成文件目录内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • 基于Python实现一个目录/文件递归检索工具
      • Python中os.listdir() 获取指定目录中的文件和子目录的列表
      • Python实现复制文件从一个目录到另外一个目录
      • python获取当前文件和目录路径的方法详解
      • python删除指定目录下的文件和文件夹的实现
      • Python获取当前目录下所有文件的6种方法总结

      站内搜索