AI开发-python-langchain框架(3-2-文本文档加载器 )
上节讲如何将文本进行向量化,本节讲讲如何将文本文件加载到程序中,进行下一步处理,langchain 的 TextLoader提供了这个功能。
langchain 的 TextLoader 并非支持所有文本格式,它的核心作用是读取「纯文本类文件」,对非纯文本格式(如带格式的文档、二进制文件)无法直接解析,需搭配对应专用 Loader。
一、TextLoader 支持的主要文本类型(可直接读取)
- 纯文本文件:
.txt(最常用,无任何格式,直接读取文本内容); - 简单标记 / 配置文件:
.md(Markdown,仅读取文本内容,忽略格式标记)、.json(读取完整文本字符串,不解析 JSON 结构)、.yaml/.yml(同 JSON,仅读取文本,不解析配置); - 代码文件:
.py(Python 代码)、.java、.js等,读取代码文本内容(不执行、不解析代码逻辑); - 其他纯文本类文件:
.csv(读取为纯文本,不解析表格结构)、.log(日志文件,纯文本形式直接读取)。
二、TextLoader 不支持的文本格式(需专用 Loader)
- 带格式文档:
.docx(Word)、.pptx(PPT)、.xlsx(Excel); - PDF 文件:
.pdf(需用 PyPDFLoader、PDFMinerLoader 等); - 二进制文件:
.png(图片)、.mp3(音频)、.mp4(视频); - 加密 / 压缩文件:
.zip、.rar、加密文档等。
三、关键补充
# pip install unstructured # 安装unstructured库,用于处理非结构化文档
from langchain_community.document_loaders import TextLoader, DirectoryLoader, JSONLoader
import os
# ==================== 获取当前文件路径 ====================
# os.path.abspath(__file__) 获取当前脚本的绝对路径
# os.path.dirname() 获取路径的目录部分
current_dir = os.path.dirname(os.path.abspath(__file__))
print('---------当前路径')
print(current_dir) # 打印当前脚本所在的目录路径
# ==================== 加载单个TXT文件 ====================
print('---------txt文件加载')
# TextLoader: 用于加载文本文件的加载器
# "./txt/1.txt": 相对路径下的txt文件
# encoding="utf8": 指定文件编码为UTF-8,防止中文乱码
loader = TextLoader("./txt/1.txt", encoding="utf8")
doc = loader.load() # load()方法执行实际的文件读取操作
print(doc) # 打印加载的文档内容
# ==================== 加载单个HTML文件 ====================
print('---------html文件加载')
# 虽然文件是HTML格式,但TextLoader会将其作为纯文本读取
loader1 = TextLoader("./txt/Color-management.html", encoding="utf8")
doc1 = loader1.load()
print(doc1)
# ==================== 目录加载器 ====================
# Windows系统需要先安装: pip install python-magic-bin
# Linux系统需要先安装: pip install python-magic
print('---------目录加载器 一个目录下所有文件加载')
# DirectoryLoader: 用于加载整个目录下的所有文件
# './file': 指定要加载的目录路径
# 默认会加载目录下的所有文件(包括子目录)
loader = DirectoryLoader('./file')
texts = loader.load() # 加载目录中的所有文件
print(texts) # 打印所有加载的文档
# ==================== 使用glob参数筛选特定文件 ====================
print('---------我们可以使用 glob 参数来控制加载哪些文件。请注意,此处它只加载.json 文件。')
# DirectoryLoader 的高级用法:
# glob="**/*.json": 使用glob模式匹配所有.json文件
# ** 表示任意层级的子目录
# *.json 表示所有以.json结尾的文件
# loader_cls=TextLoader: 指定使用TextLoader来加载匹配到的文件
# loader_kwargs={'encoding': 'gbk'}: 传递给TextLoader的参数,指定使用GBK编码
# 因为有些JSON文件可能使用GBK编码(常见于中文Windows系统)
loader = DirectoryLoader(
'./txt', # 要扫描的根目录
glob="**/*.json", # 只加载JSON文件
loader_cls=TextLoader, # 使用文本加载器
loader_kwargs={'encoding': 'gbk'} # 指定编码为GBK
)
josntxt = loader.load() # 加载所有匹配的JSON文件
print(josntxt) # 打印加载的JSON文件内容
执行结果:
D:\ProgramData\Anaconda3\envs\llm\python.exe D:/pythonProject2025/LLmProject/3/2-文本文档加载器.py
---------当前路径
D:\pythonProject2025\LLmProject\3
---------txt文件加载
[Document(page_content=' 文本切割是自然语言处理中的基础操作,主要用于将较长的文本内容拆解为更小的、可处理的单......
---------html文件加载
[Document(page_content='<!DOCTYPE html>\n<html lang="zh">\n\n<head>\n\t<meta charset="utf-8">\n\t<base href=".....
---------目录加载器 一个目录下所有文件加载
[Document(page_content='文本切割是自然语言处理中的基础操作,主要用于将较长的文本内容拆解为更小的、可处理的单元,....
---------我们可以使用 glob 参数来控制加载哪些文件。请注意,此处它只加载.json 文件。
[Document(page_content='{\n\t"code": 200,\n\t"success": true,\n\t"obj": {\n\t\t"dataList": [\n\t\t\t{\n\t\t\t\t....
更多学习资料尽在 老虎网盘资源
浙公网安备 33010602011771号