如何通过动态生成类实例存储信息,实现PyPDF2驱动的PDF分类
动态生成File_Sort类实例实现PDF分类排序
嘿,我来帮你搞定这个动态生成类实例的问题!你已经定义了File_Sort类来存储PDF分类所需的识别信息,接下来要动态创建实例其实有好几种灵活的方法,我给你一一拆解:
方法1:从配置列表批量生成实例
这是最常用的方式——先把所有PDF分类的配置整理成列表,再循环遍历生成实例并存储,后续查找和使用都很方便:
class File_Sort(object): def __init__(self, identifier, file_text, file_path): self.identifier = identifier self.file_text = file_text # PyPDF2要识别的唯一特征字符串 self.file_path = file_path # 文件目标移动路径 # 准备所有PDF分类的配置数据,每个元素对应一个分类的信息 pdf_sort_configs = [ {"identifier": "招商银行账单", "file_text": "622848XXXXXX1234", "file_path": "./sorted_pdfs/bank/cmb/"}, {"identifier": "社保缴费凭证", "file_text": "社保个人编号:12345678", "file_path": "./sorted_pdfs/social_security/"}, {"identifier": "增值税专用发票", "file_text": "发票号码:98765432", "file_path": "./sorted_pdfs/invoice/vat/"} ] # 动态生成实例,并存入字典(用identifier做键,方便后续快速查找) sort_instances = {} for config in pdf_sort_configs: # 用**config把字典键值对作为参数传给类的构造方法 instance = File_Sort(**config) sort_instances[instance.identifier] = instance # 测试:获取社保凭证的实例信息 social_sec_instance = sort_instances["社保缴费凭证"] print(f"社保凭证的目标存储路径:{social_sec_instance.file_path}")
这种方法的优势是配置和业务代码完全分离,后续要新增或修改分类,只需要在pdf_sort_configs里调整就行,不用改动生成实例的逻辑,非常灵活。
方法2:从配置文件加载(适合大量分类场景)
如果你的PDF分类特别多,或者需要多人协作维护分类规则,把配置写到JSON/YAML这类文件里会更方便:
首先创建一个pdf_sort_config.json配置文件:
[ {"identifier": "招商银行账单", "file_text": "622848XXXXXX1234", "file_path": "./sorted_pdfs/bank/cmb/"}, {"identifier": "社保缴费凭证", "file_text": "社保个人编号:12345678", "file_path": "./sorted_pdfs/social_security/"}, {"identifier": "增值税专用发票", "file_text": "发票号码:98765432", "file_path": "./sorted_pdfs/invoice/vat/"} ]
然后读取配置文件并生成实例:
import json class File_Sort(object): def __init__(self, identifier, file_text, file_path): self.identifier = identifier self.file_text = file_text self.file_path = file_path # 读取JSON配置文件 with open("pdf_sort_config.json", "r", encoding="utf-8") as f: pdf_configs = json.load(f) # 用字典推导式快速生成实例字典 sort_instances = {cfg["identifier"]: File_Sort(**cfg) for cfg in pdf_configs}
这种方式适合大规模的分类场景,维护配置文件比修改代码更安全,也方便非开发人员参与调整分类规则。
方法3:动态添加实例的工具函数
如果需要在程序运行过程中(比如用户通过界面新增分类)动态添加实例,可以写一个专门的工具函数:
class File_Sort(object): def __init__(self, identifier, file_text, file_path): self.identifier = identifier self.file_text = file_text self.file_path = file_path # 初始化存储实例的字典 sort_instances = {} def add_pdf_sort_instance(identifier, file_text, file_path): """动态添加PDF分类实例的工具函数""" if identifier in sort_instances: print(f"⚠️ 警告:已存在标识符为「{identifier}」的实例,将覆盖原有配置") sort_instances[identifier] = File_Sort(identifier, file_text, file_path) # 调用函数添加实例 add_pdf_sort_instance("招商银行账单", "622848XXXXXX1234", "./sorted_pdfs/bank/cmb/") add_pdf_sort_instance("公积金缴存证明", "个人公积金账号:87654321", "./sorted_pdfs/housing_fund/")
这个方法适合需要实时新增分类的交互场景,调用函数就能完成实例的创建和存储,逻辑清晰。
后续和PyPDF2结合的小提示
等你生成好所有实例后,就可以遍历本地PDF文件,用PyPDF2读取每个文件的文本内容,然后逐个匹配实例的file_text特征:
- 如果PDF文本包含某个实例的
file_text,就用shutil.move()把文件移动到对应的file_path路径下 - 可以给实例加个优先级字段,解决多个特征匹配的冲突问题
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

