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_()

代码功能:

  • 使用 PyQt5 创建一个简单的图形界面,包含一个按钮。
  • 点击按钮后,打开文件对话框,选择要处理的文件夹。
  • 遍历文件夹内的所有 .txt 文件,提取每个文件中的班名信息。
  • 将提取到的班名赋值到相应的 .txt 文件中。
  • 使用 chardet 库自动识别文件编码,确保正确读取和写入文件内容。
  • 最后弹出对话框提示用户任务已完成。

使用方法:

  1. 将代码保存为 .py 文件。
  2. 运行代码,点击按钮选择要处理的文件夹。
  3. 程序会自动遍历文件夹内的所有 .txt 文件,提取班名并赋值到相应的位置。
  4. 任务完成后,会弹出对话框提示用户。

注意:

  • 代码假设所有 .txt 文件中的班名信息格式一致,并且都包含 '班名=' 和 '学号=' 关键词。
  • 可以根据实际情况修改代码,例如添加对其他文件格式的支持。

代码示例说明:

  • chardet 库用于自动识别文件编码,避免出现乱码问题。
  • QMessageBox.information() 用于弹出提示信息对话框。
  • QFileDialog.getExistingDirectory() 用于打开文件对话框选择文件夹。
  • os.listdir() 用于遍历文件夹内的所有文件和文件夹。
  • os.path.isdir() 用于判断路径是否为文件夹。
  • os.path.join() 用于拼接路径字符串。
  • file_path.endswith('.txt') 用于判断文件是否是 .txt 文件。
  • content.find('班名=') 用于查找文本中 '班名=' 的位置。
  • content.strip() 用于去除文本中的空格和换行符。
  • with open(file_path, 'rb') as f: 用于以二进制模式打开文件。
  • f.read() 用于读取文件内容。
  • content.encode(encoding) 用于将字符串编码成字节流。
  • f.write(content.encode(encoding)) 用于将字节流写入文件。

改进建议:

  • 可以添加进度条显示处理进度。
  • 可以添加日志记录功能,记录处理过程中的信息。
  • 可以添加错误处理机制,例如处理文件打开失败的情况。
  • 可以添加参数配置功能,例如允许用户指定要处理的文件类型。', 'content': '```python 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_()


**代码功能:**

* 使用 PyQt5 创建一个简单的图形界面,包含一个按钮。
* 点击按钮后,打开文件对话框,选择要处理的文件夹。
* 遍历文件夹内的所有 .txt 文件,提取每个文件中的班名信息。
* 将提取到的班名赋值到相应的 .txt 文件中。
* 使用 `chardet` 库自动识别文件编码,确保正确读取和写入文件内容。
* 最后弹出对话框提示用户任务已完成。

**使用方法:**

1. 将代码保存为 .py 文件。
2. 运行代码,点击按钮选择要处理的文件夹。
3. 程序会自动遍历文件夹内的所有 .txt 文件,提取班名并赋值到相应的位置。
4. 任务完成后,会弹出对话框提示用户。

**注意:**

* 代码假设所有 .txt 文件中的班名信息格式一致,并且都包含 '班名=' 和 '学号=' 关键词。
* 可以根据实际情况修改代码,例如添加对其他文件格式的支持。

**代码示例说明:**

* `chardet` 库用于自动识别文件编码,避免出现乱码问题。
* `QMessageBox.information()` 用于弹出提示信息对话框。
* `QFileDialog.getExistingDirectory()` 用于打开文件对话框选择文件夹。
* `os.listdir()` 用于遍历文件夹内的所有文件和文件夹。
* `os.path.isdir()` 用于判断路径是否为文件夹。
* `os.path.join()` 用于拼接路径字符串。
* `file_path.endswith('.txt')` 用于判断文件是否是 .txt 文件。
* `content.find('班名=')` 用于查找文本中 '班名=' 的位置。
* `content.strip()` 用于去除文本中的空格和换行符。
* `with open(file_path, 'rb') as f:` 用于以二进制模式打开文件。
* `f.read()` 用于读取文件内容。
* `content.encode(encoding)` 用于将字符串编码成字节流。
* `f.write(content.encode(encoding))` 用于将字节流写入文件。

**改进建议:**

* 可以添加进度条显示处理进度。
* 可以添加日志记录功能,记录处理过程中的信息。
* 可以添加错误处理机制,例如处理文件打开失败的情况。
* 可以添加参数配置功能,例如允许用户指定要处理的文件类型。
批量自动赋值班名 - Python PyQt5 代码示例

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

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