You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过动态生成类实例存储信息,实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:59:14