Python PyQt5 自动赋值班名工具 - 批量修改 TXT 文件
该程序的功能是自动为某目录下所有 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_()
使用方法:
- 运行程序。
- 点击“自动赋值班名”按钮。
- 选择要处理的文件夹。
- 程序会自动遍历该文件夹下的所有子文件夹,并对所有 txt 文件进行班名赋值。
- 任务完成后,会弹出提示对话框。
注意:
- 该程序假设 txt 文件中包含“班名=”和“学号=”字段,并且班名位于这两个字段之间。
- 如果 txt 文件中没有“班名=”字段,则程序会使用上一个文件夹的班名进行赋值。
- 如果 txt 文件中存在多个“班名=”字段,程序只会提取第一个字段的班名。
- 该程序仅支持 UTF-8 编码的 txt 文件。
源代码地址:
原文地址: https://www.cveoy.top/t/topic/lQ3b 著作权归作者所有。请勿转载和采集!