RAG文档读取范式之一——本地文件读取

张开发
2026/4/20 4:16:19 15 分钟阅读

分享文章

RAG文档读取范式之一——本地文件读取
一、核心定义、支持文件与适用场景定义从本地磁盘读取各种格式文件自动统一提取文本内容与元数据如文件路径、名称、大小、修改时间等适配 RAG 知识库构建的基础数据输入需求。支持文件类型覆盖主流常用格式包括 TXT / Markdown、PDF、Word DOCX、CSV、ExcelXLSX可满足绝大多数本地文档读取需求。适用场景RAG 知识库构建、本地文档批量解析、企业内部数据入库、离线文档检索等场景是企业级 RAG 系统落地的基础数据来源。二、分类型实战总结LangChain LlamaIndex 双框架1. 单类型文件读取单类型读取同一目录下只存在同一种格式的文件全是 TXT、全是 PDF、全是 Word 或全是表格。这种方式加载最简单、最稳定也是企业知识库最常用的入库方式。① TXT / Markdown核心目标读取纯文本类文档TXT、Markdown保留文本原有格式提取完整元数据支持单个或批量加载适配笔记、说明文档等纯文本场景。框架核心加载器关键操作输出特点LlamaIndexSimpleDirectoryReader指定数据目录、限定文件后缀.txt/.md配置中文编码一键批量加载元数据丰富含文件路径、名称、类型、大小、创建/修改时间可统计加载数量输出文本前N字预览LangChainTextLoader / DirectoryLoaderTextLoader 加载单个文件DirectoryLoader 批量加载支持多线程加速精准匹配文件后缀元数据包含文件来源支持单个/批量灵活加载多线程提升批量处理效率LlamaIndex 代码from llama_index.core import SimpleDirectoryReader # 读取单个/多个 txt/md 文件 documents SimpleDirectoryReader( input_dir./data, # 数据目录 required_exts[.txt, .md], # 限定文件类型 encodingutf-8 # 中文编码 ).load_data() # 查看结果 print(f加载的文档数量: {len(documents)}) print(第一篇文档元数据:, documents[0].metadata) print(第一篇文档前200字:, documents[0].text[:200])输出示例加载的文档数量: 3 第一篇文档元数据: {file_path: E:\\projectCursor\\博客\\RAG\\文档预处理\\file_test\\demo.txt, file_name: demo.txt, file_type: text/plain, file_size: 136, creation_date: 2026-04-14, last_modified_date: 2026-04-14} 第一篇文档前200字: 这是一个演示文本用于测试RAG数据加载流程。 RAG检索增强生成是大模型应用落地的核心范式。LangChain 代码from langchain_community.document_loaders import TextLoader, DirectoryLoader # 1. 加载单个文件 loader TextLoader(./data/demo.txt, encodingutf-8) doc loader.load() print(单个文件加载结果:) print(元数据:, doc[0].metadata) print(内容前100字:, doc[0].page_content[:100]) # 2. 批量加载目录下所有 TXT 文件 print(\n批量加载结果:) loader DirectoryLoader( path./data, glob**/*.txt, # 匹配所有txt loader_clsTextLoader, # 指定加载器 use_multithreadingTrue # 多线程加速 ) docs loader.load() print(f共加载 {len(docs)} 个txt文件)输出示例单个文件加载结果: 元数据: {source: ./data/demo.txt} 内容前100字: 这是一个演示文本用于测试RAG数据加载流程。 批量加载结果: 共加载 5 个txt文件② PDF纯文本核心目标读取 PDF 文档自动按页拆分提取每一页的文本内容与元数据页码、文件信息适配手册、论文、报告等 PDF 类文档场景。框架核心加载器关键操作输出特点LlamaIndexSimpleDirectoryReader指定数据目录、限定 .pdf 后缀无需额外配置自动按页读取元数据含文件名称、路径、页码标签可统计 PDF 总页数输出每页文本前N字预览LangChainPyPDFLoader指定单个 PDF 文件路径通过 load_and_split() 方法按页拆分加载元数据含文件来源、页码按页拆分后可单独处理每一页内容适配分页解析需求LlamaIndex 代码from llama_index.core import SimpleDirectoryReader # 读取PDF文件 documents SimpleDirectoryReader( input_dir./data, required_exts[.pdf], ).load_data() print(f加载的PDF页数: {len(documents)}) print(第一页元数据:, documents[0].metadata) print(第一页内容前300字:, documents[0].text[:300])输出示例加载的PDF页数: 15 第一页元数据: {file_name: handbook.pdf, file_path: ./data/handbook.pdf, page_label: 1} 第一页内容前300字: 公司产品手册 版本: V3.0 更新时间: 2024-12-01 产品概述 本产品是一款基于大模型的企业级智能问答系统支持私有知识库接入、多轮对话、智能检索等功能。LangChain 代码from langchain_community.document_loaders import PyPDFLoader # 加载PDF并拆分 loader PyPDFLoader(./data/handbook.pdf) pages loader.load_and_split() # 按页拆分 print(fPDF总页数: {len(pages)}) print(第1页元数据:, pages[0].metadata) print(第1页内容前200字:, pages[0].page_content[:200])输出示例PDF总页数: 15 第1页元数据: {source: ./data/handbook.pdf, page: 0} 第1页内容前200字: 公司产品手册 版本: V3.0 更新时间: 2024-12-01 产品概述 本产品是一款基于大模型的企业级智能问答系统支持私有知识库接入、多轮对话、智能检索等功能。③ Word DOCX核心目标读取 Word 文档DOCX 格式提取正文内容与文件元数据保留原有段落结构适配工作报告、文案、规范等 Word 类文档场景。框架核心加载器关键操作输出特点LlamaIndexSimpleDirectoryReader指定数据目录、限定 .docx 后缀一键读取无需额外配置元数据含文件名称、路径可统计加载的 DOCX 文件数量保留正文段落结构LangChainDocx2txtLoader指定单个 DOCX 文件路径直接加载自动提取正文元数据含文件来源完整提取正文内容保留原有段落结构适配文案类文档解析LlamaIndex 代码from llama_index.core import SimpleDirectoryReader documents SimpleDirectoryReader( input_dir./data, required_exts[.docx], ).load_data() print(f加载的DOCX数量: {len(documents)}) print(第一篇文档元数据:, documents[0].metadata) print(第一篇文档前200字:, documents[0].text[:200])输出示例加载的DOCX数量: 2 第一篇文档元数据: {file_name: report.docx, file_path: ./data/report.docx} 第一篇文档前200字: 2024年度工作总结 报告人: 张三 部门: 技术研发部 时间: 2024-12-15 一、工作成果 1. 完成RAG系统核心模块开发 2. 优化向量检索性能提升30%准确率LangChain 代码from langchain_community.document_loaders import Docx2txtLoader loader Docx2txtLoader(./data/report.docx) docs loader.load() print(DOCX加载结果:) print(元数据:, docs[0].metadata) print(内容前300字:, docs[0].page_content[:300])输出示例DOCX加载结果: 元数据: {source: ./data/report.docx} 内容前300字: 2024年度工作总结 报告人: 张三 部门: 技术研发部 时间: 2024-12-15 一、工作成果 1. 完成RAG系统核心模块开发 2. 优化向量检索性能提升30%准确率 3. 搭建企业级知识库包含1000文档④ CSV / Excel表格数据核心目标读取表格类文件CSV、Excel提取表格内容并转为文本格式保留字段与数据对应关系适配业务数据表、清单数据等场景。框架核心加载器关键操作输出特点LlamaIndexSimpleDirectoryReader指定数据目录、限定 .csv/.xlsx 后缀自动读取表格文件无需区分格式元数据含文件名称、路径按文件整体读取保留表格原始格式行列对应可批量加载多个表格文件LangChainCSVLoader / UnstructuredExcelLoaderCSVLoader 读取 CSV 文件UnstructuredExcelLoader 读取 Excel 文件分别处理不同表格格式按行解析数据元数据含文件来源、行号/页码字段与数据对应清晰适配业务数据解析LlamaIndex 代码from llama_index.core import SimpleDirectoryReader # 读取CSV/Excel documents SimpleDirectoryReader( input_dir./data, required_exts[.csv, .xlsx], ).load_data() print(f加载的表格文件数: {len(documents)}) for i, doc in enumerate(documents[:2]): # 输出前2个 print(f\n第{i1}个文件元数据:, doc.metadata) print(f第{i1}个文件内容前200字:, doc.text[:200])输出示例加载的表格文件数: 3 第1个文件元数据: {file_name: data.csv, file_path: ./data/data.csv} 第1个文件内容前200字: id,name,category,value 1,产品A,技术,100 2,产品B,市场,200 3,产品C,运营,150 4,产品D,技术,120 第2个文件元数据: {file_name: sales.xlsx, file_path: ./data/sales.xlsx} 第2个文件内容前200字: 日期,地区,销售额,利润 2024-01-01,北京,50000,15000 2024-01-02,上海,60000,18000 2024-01-03,广州,45000,13500LangChain 代码# CSV 读取 from langchain_community.document_loaders import CSVLoader loader CSVLoader(./data/data.csv) docs loader.load() print(CSV加载结果:) print(第一条数据元数据:, docs[0].metadata) print(第一条数据内容:, docs[0].page_content) # Excel 读取 print(\nExcel加载结果:) from langchain_community.document_loaders import UnstructuredExcelLoader loader UnstructuredExcelLoader(./data/sales.xlsx) excel_docs loader.load() print(Excel第一条数据元数据:, excel_docs[0].metadata) print(Excel第一条数据内容:, excel_docs[0].page_content[:200])输出示例CSV加载结果: 第一条数据元数据: {source: ./data/data.csv, row: 0} 第一条数据内容: id: 1 name: 产品A category: 技术 value: 100 Excel加载结果: Excel第一条数据元数据: {source: ./data/sales.xlsx, page_number: 0} Excel第一条数据内容: 日期: 2024-01-01 地区: 北京 销售额: 50000 利润: 150002. 多类型文件同时读取核心目标当一个目录内同时存在 PDF、Word、TXT、MD、CSV、Excel 等多种格式文件时实现一次性批量加载所有文件无需分别处理提升数据入库效率。框架核心加载方式关键操作输出特点LlamaIndexSimpleDirectoryReader自动识别指定数据目录开启递归子文件夹功能无需限定文件后缀自动识别所有支持格式可统计总加载文档数输出文件类型分布全自动处理代码极简LangChain多加载器组合自定义函数自定义加载函数根据文件后缀判断调用对应加载器PyPDFLoader、Docx2txtLoader 等批量加载灵活可控可根据需求自定义加载逻辑适配复杂文件夹结构LlamaIndex 代码自动识别所有类型from llama_index.core import SimpleDirectoryReader # 自动读取目录下所有支持的文件pdf/txt/md/docx/csv/xlsx documents SimpleDirectoryReader( input_dir./data, recursiveTrue, # 递归子文件夹 ).load_data() print(f共加载文档数: {len(documents)}) print(文件类型分布:) types {} for doc in documents: ext doc.metadata.get(file_type, unknown) types[ext] types.get(ext, 0) 1 for k, v in types.items(): print(f {k}: {v}个)输出示例共加载文档数: 25 文件类型分布: application/pdf: 15个 text/plain: 5个 application/vnd.openxmlformats-officedocument.wordprocessingml.document: 2个 text/csv: 2个 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: 1个LangChain 代码多类型批量加载from langchain_community.document_loaders import PyPDFLoader, Docx2txtLoader, TextLoader import os def load_all_files(path): docs [] for filename in os.listdir(path): fp os.path.join(path, filename) # 根据文件后缀选择加载器 if filename.endswith(.pdf): loader PyPDFLoader(fp) docs.extend(loader.load()) elif filename.endswith(.docx): loader Docx2txtLoader(fp) docs.extend(loader.load()) elif filename.endswith(.txt) or filename.endswith(.md): loader TextLoader(fp, encodingutf-8) docs.extend(loader.load()) return docs documents load_all_files(./data) print(fLangChain多类型加载结果: 共加载{len(documents)}个文档)输出示例LangChain多类型加载结果: 共加载25个文档三、核心选型与注意事项1. 框架选型逻辑追求简洁高效、一键操作优先选择 LlamaIndex无论是单类型还是多类型文件均通过 SimpleDirectoryReader 实现代码简洁无需额外配置加载器自动识别格式。需要灵活自定义、扩展加载逻辑优先选择 LangChain可根据文件后缀、文件夹结构自定义加载函数适配复杂业务场景如筛选特定文件、添加额外处理逻辑。单类型批量加载两种框架均可LlamaIndex 配置更简单LangChain 多线程加载更高效适用于大量文本文件。2. 关键注意事项编码配置读取 TXT/Markdown 等中文文本时需配置 encodingutf-8避免出现中文乱码问题。路径配置确保 input_dirLlamaIndex、pathLangChain路径正确指向本地文件所在目录避免因路径错误导致加载失败。文件格式确保文件格式与指定后缀一致如 .docx 而非 .doc.xlsx 而非 .xls否则可能无法正常加载。递归加载多类型文件读取时若需加载子文件夹内文件LlamaIndex 需开启 recursiveTrueLangChain 需在自定义函数中添加递归逻辑。元数据差异LlamaIndex 输出的元数据更丰富含文件大小、创建/修改时间等LangChain 元数据相对简洁主要含文件来源可根据需求选择。四、总结文档类型框架核心加载器/方式代码特点适用场景TXT / MarkdownLlamaIndexSimpleDirectoryReader指定后缀 .txt/.md自动批量加载纯文本、笔记、说明文档LangChainTextLoader / DirectoryLoader单个加载 目录批量支持多线程简单文本批量入库PDFLlamaIndexSimpleDirectoryReader指定 .pdf自动按页读取带页码标准文字型 PDF、手册、论文LangChainPyPDFLoader自动分页 元数据带页码常用 PDF 解析Word DOCXLlamaIndexSimpleDirectoryReader指定 .docx一键读取标准 Word 文档LangChainDocx2txtLoader提取正文保留段落结构工作报告、文案类文档CSV / ExcelLlamaIndexSimpleDirectoryReader指定 .csv/.xlsx自动读取简单表格、清单数据LangChainCSVLoader / UnstructuredExcelLoader按行解析字段清晰业务数据表、导出报表多格式混合LlamaIndexSimpleDirectoryReader全自动识别一行代码搞定文件夹含多种格式文件LangChain多加载器组合按后缀判断灵活可控自定义批量入库逻辑五、一句话总结本地文件读取核心是「格式适配批量高效元数据完整」LlamaIndex 主打简洁全自动LangChain 侧重灵活可扩展可根据文件类型单类型/多类型和业务需求选择适配框架完美支撑 RAG 知识库本地数据的高效入库。

更多文章