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

如何读取多层文件夹下TXT文件并按对应PDF输出分类结果到独立CSV

以下是修正后可直接运行的代码,完全匹配你的需求:

import os
import re
import pandas as pd

# ------------------- 请提前确认以下变量已正确加载/定义 -------------------
# preprocessText:你自己的文本预处理函数
# loaded_vectorizer:已训练好的TF-IDF向量化器
# svcModelpkl:已训练好的SVM分类模型
# encoder:标签编码器
# folderPath:替换为你自己的根文件夹路径
folderPath = "替换为你的根文件夹路径"
# ----------------------------------------------------------------------

# 遍历根文件夹下的所有二级子文件夹(对应原PDF文件名)
for pdf_name in os.listdir(folderPath):
    pdf_dir = os.path.join(folderPath, pdf_name)
    # 跳过根目录下的非文件夹内容
    if not os.path.isdir(pdf_dir):
        continue
    # 定位到当前PDF对应的txtFiles目录
    txt_dir = os.path.join(pdf_dir, "txtFiles")
    if not os.path.exists(txt_dir):
        continue
    
    page_num_list = []
    label_list = []
    
    # 遍历当前PDF的所有拆分TXT文件
    for txt_file in os.listdir(txt_dir):
        if not txt_file.endswith(".txt"):
            continue
        # 提取页码:默认匹配TXT文件名中的数字,如「1.txt」「第3页.txt」均可识别,命名规则不同可调整正则
        page_match = re.search(r"\d+", txt_file)
        if not page_match:
            continue
        page_num = int(page_match.group())
        
        # 读取文本并执行分类预测
        txt_path = os.path.join(txt_dir, txt_file)
        with open(txt_path, "r", encoding="utf-8") as f:
            text = f.read()
        clean_text = preprocessText(text)
        tfidf_text = loaded_vectorizer.transform([clean_text])
        predicted = svcModelpkl.predict(tfidf_text)
        label = encoder.inverse_transform(predicted)[0]
        
        page_num_list.append(page_num)
        label_list.append(label)
    
    # 生成当前PDF对应的同名CSV
    if page_num_list:
        df = pd.DataFrame({
            "页码": page_num_list,
            "分类预测标签": label_list
        })
        # 按页码升序排序
        df = df.sort_values(by="页码").reset_index(drop=True)
        # CSV默认保存在对应PDF的二级子文件夹下,要统一保存在根目录可替换为下一行注释代码
        csv_path = os.path.join(pdf_dir, f"{pdf_name}.csv")
        # csv_path = os.path.join(folderPath, f"{pdf_name}.csv")
        df.to_csv(csv_path, index=False, encoding="utf-8-sig")

注意事项:

  • 如果你的TXT文件是GBK编码,把open函数中的encoding="utf-8"改为encoding="gbk"即可
  • 若TXT文件名的页码匹配不符合你的命名规则,自行修改re.search(r"\d+", txt_file)中的正则表达式即可

内容的提问来源于stack exchange,提问作者Murthy P N V S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:27:03