该程序的功能是自动为某目录下所有 txt 文件赋值班名,班名从文件内容中提取。具体实现思路如下:

  • 弹出文件对话框,让用户选择要处理的目录。
  • 遍历所选目录下的所有文件夹,对于每一个文件夹,遍历其中所有的 txt 文件。
  • 对于每一个 txt 文件,从文件内容中提取班名和学号之间的内容,如果班名为空,则使用上一个文件夹内的班名。将提取到的班名赋值给上一个文件夹内的班名,并将班名赋值到原始文件中。
  • 完成任务后,弹出提示对话框。

该程序使用了 PyQt5 库来实现 GUI 界面,使用了 os 库来遍历文件夹和文件,使用了 chardet 库来自动检测文件编码。其中,编码检测是为了避免读取时出现乱码。

import os
import chardet
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QFileDialog, QMessageBox

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建按钮并设置位置和大小
        btn = QPushButton('自动赋值班名', self)
        btn.setGeometry(50, 50, 200, 50)

        # 按钮被点击时执行 doSomething 函数
        btn.clicked.connect(self.doSomething)

        # 设置窗口标题、大小和显示位置
        self.setWindowTitle('自动赋值班名')
        self.setGeometry(300, 300, 300, 150)
        self.show()

    def doSomething(self):
        prev_class_name = ''  # 上一个文件夹内的班名

        # 打开文件对话框并获取选择的目录路径
        dir_path = QFileDialog.getExistingDirectory(None, '选择要处理的文件夹', '.', QFileDialog.ShowDirsOnly)
        if not dir_path:  # 如果用户取消了选择,则退出函数
            return

        # 遍历所选目录下的所有文件夹
        for folder in os.listdir(dir_path):
            if not os.path.isdir(os.path.join(dir_path, folder)):  # 如果当前路径不是文件夹,则跳过
                continue

            # 遍历当前文件夹内的所有txt文件
            for txt_file in os.listdir(os.path.join(dir_path, folder)):
                if not txt_file.endswith('.txt'):  # 如果该文件不是txt文件,则跳过
                    continue
                
                file_path = os.path.join(dir_path, folder, txt_file)  # 拼接出txt文件的全路径
            
                # 打开txt文件并读取内容
                with open(file_path, 'rb') as f:
                    content_bytes = f.read()
                encoding = chardet.detect(content_bytes)['encoding']
                content = content_bytes.decode(encoding)
                
                # 从文件内容中提取班名和学号之间的内容
                class_name_index = content.find('班名=') + len('班名=')
                student_id_index = content.find('学号=')
                extracted_content = content[class_name_index:student_id_index].strip()  # 去除空格和换行符
                
                # 如果班名为空,则使用上一个文件夹内的班名
                if extracted_content == '':
                    extracted_content = prev_class_name
            
                # 将提取到的班名赋值给上一个文件夹内的班名
                prev_class_name = extracted_content
                
                # 将班名赋值到原始文件中
                content = content[:class_name_index] + extracted_content + '\n' + content[student_id_index:]
                with open(file_path, 'wb') as f:
                    f.write(content.encode(encoding))
                
                # 输出当前文件夹和txt文件的信息
                print(f'正在处理文件夹 {folder} 中的文件 {txt_file}, 提取到的班名为 {extracted_content}')
        
        # 弹出对话框,提示任务已完成
        QMessageBox.information(self, '提示', '任务已完成!')

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    app.exec_()

使用方法:

  1. 运行程序。
  2. 点击“自动赋值班名”按钮。
  3. 选择要处理的文件夹。
  4. 程序会自动遍历该文件夹下的所有子文件夹,并对所有 txt 文件进行班名赋值。
  5. 任务完成后,会弹出提示对话框。

注意:

  • 该程序假设 txt 文件中包含“班名=”和“学号=”字段,并且班名位于这两个字段之间。
  • 如果 txt 文件中没有“班名=”字段,则程序会使用上一个文件夹的班名进行赋值。
  • 如果 txt 文件中存在多个“班名=”字段,程序只会提取第一个字段的班名。
  • 该程序仅支持 UTF-8 编码的 txt 文件。

源代码地址:

GitHub 仓库地址

Python PyQt5 自动赋值班名工具 - 批量修改 TXT 文件

原文地址: https://www.cveoy.top/t/topic/lQ3b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录