如何读取多层文件夹下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
相关产品推荐
相关产品推荐

