批量自动赋值班名 - Python PyQt5 代码示例
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库自动识别文件编码,确保正确读取和写入文件内容。 - 最后弹出对话框提示用户任务已完成。
使用方法:
- 将代码保存为 .py 文件。
- 运行代码,点击按钮选择要处理的文件夹。
- 程序会自动遍历文件夹内的所有 .txt 文件,提取班名并赋值到相应的位置。
- 任务完成后,会弹出对话框提示用户。
注意:
- 代码假设所有 .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))` 用于将字节流写入文件。
**改进建议:**
* 可以添加进度条显示处理进度。
* 可以添加日志记录功能,记录处理过程中的信息。
* 可以添加错误处理机制,例如处理文件打开失败的情况。
* 可以添加参数配置功能,例如允许用户指定要处理的文件类型。
原文地址: https://www.cveoy.top/t/topic/lQ3a 著作权归作者所有。请勿转载和采集!