来源:互联网 更新时间:2026-07-16 11:41
从本地文件系统加载文件到 LlamaIndex,最直接的方法就是通过 SimpleDirectoryReader。它就像一个“一站式”文件读取器,不需要复杂的配置就能快速读取多种格式。

默认情况下,SimpleDirectoryReader 会扫描指定目录下的所有文件,并尝试把它们当作纯文本直接读取。不过,它其实内置了对多种常见文件类型的支持,而且完全根据文件扩展名自动识别——你只需要把文件放在目录里,它就能自动搞定:
如果你需要处理 JSON 文件,那就需要先安装专门的扩展:
pip install llama-index-readers-json
然后导入:
from llama_index.readers.json import JSONReader
最简单的用法:把目录路径传给 input_dir 参数,SimpleDirectoryReader 就会自动读取目录下所有支持格式的文件:
from llama_index.core import SimpleDirectoryReader
reader = SimpleDirectoryReader(input_dir="path/to/directory")
documents = reader.load_data()
如果目录里文件很多,还可以通过并行处理来加速。需要注意的是,Windows 和 Linux/MacOS 在多线程性能上有差异——Windows 用户可能感受不到明显提升,但 Linux/MacOS 下速度会快不少:
documents = reader.load_data(num_workers=4)
设置 recursive=True 就能递归遍历子目录:
SimpleDirectoryReader(input_dir="path/to/directory", recursive=True)
除了一次性加载所有文档,你也可以用 iter_data() 方法逐个文件处理——这在内存紧张或需要按文件做特殊处理时非常有用:
reader = SimpleDirectoryReader(input_dir="path/to/directory", recursive=True)
all_docs = []
for docs in reader.iter_data():
#
all_docs.extend(docs)
如果你只想读取几个特定的文件,直接把文件路径列表传给 input_files 参数即可:
SimpleDirectoryReader(input_files=["path/to/file1", "path/to/file2"])
反过来,如果只想排除某些文件,用 exclude 参数:
SimpleDirectoryReader(input_dir="path/to/directory", exclude=["path/to/file1", "path/to/file2"])
还可以通过 required_exts 限定只读取某些扩展名,其他文件一律忽略:
SimpleDirectoryReader(input_dir="path/to/directory", required_exts=[".pdf", ".docx"])
甚至限制文件总数,避免一次性加载过多:
SimpleDirectoryReader(input_dir="path/to/directory", num_files_limit=100)
默认编码是 UTF-8,如果遇到其他编码的文件,可以用 encoding 参数指定:
SimpleDirectoryReader(input_dir="path/to/directory", encoding="latin-1")
很多时候我们不仅需要文件内容,还需要附带一些元数据(比如文件路径、自定义标签)。这时可以提供一个函数,file_metadata 参数会把它应用到每个文件上,结果会自动附加到 Document 对象中:
def get_meta(file_path):
return {"foo": "bar", "file_path": file_path}
SimpleDirectoryReader(input_dir="path/to/directory", file_metadata=get_meta)
这个函数接收文件路径作为唯一参数,返回一个字典作为元数据。
如果你有自定义的文件格式,可以先继承 BaseReader 实现一个读取类,然后通过 file_extractor 字典注册。举个例子,支持 .myfile 格式:
from llama_index.core import SimpleDirectoryReader
from llama_index.core.readers.base import BaseReader
from llama_index.core import Document
class MyFileReader(BaseReader):
def load_data(self, file, extra_info=None):
with open(file, "r") as f:
text = f.read()
# load_data returns a list of Document objects
return [Document(text=text + "Foobar", extra_info=extra_info or {})]
reader = SimpleDirectoryReader(
input_dir="./data", file_extractor={".myfile": MyFileReader()}
)
documents = reader.load_data()
注意:BaseReader 的 load_data 方法需要返回 Document 对象的列表。同时要记住,自定义的文件提取器会覆盖默认对该扩展名的处理方式,如果需要保留原有的 PDF、CSV 等支持,你需要把它们也显式加回来。
如果你不想限制在本地磁盘,SimpleDirectoryReader 还支持通过 fs 参数访问远程文件系统。只要是实现了 fsspec 协议的对象都可以用——AWS S3、Azure Blob、Google Drive、SFTP 等都有开源实现。以 S3 为例:
from s3fs import S3FileSystem
s3_fs = S3FileSystem(key="...", secret="...")
bucket_name = "my-document-bucket"
reader = SimpleDirectoryReader(
input_dir=bucket_name,
fs=s3_fs,
recursive=True, # recursively searches all subdirectories
)
documents = reader.load_data()
这样一来,远程文件就像本地文件一样被加载到 LlamaIndex 中,省去了手动下载的麻烦。
七麦数据官网网页地址 七麦数据官方入口在线首页
币安Binance官方中文网站 币安App最新版下载及新手注册指南
问卷星官方网站入口地址 问卷星网页版在线使用
闲鱼的严选验货在哪里看?闲鱼严选和验货宝哪个可靠
新浪人工智能热点小时报丨2026年06月20日02时_今日实时人工智能热点速递
淘宝直播如何看回放在哪里看?怎么查看淘宝直播回放
欧易OKX官方网站直达入口 2026欧易官方App安卓版v7.1.0下载安装
花的网名大全男生古风(精选100个)
以太坊(ETH)未来数周或持续呈现低迷态势,多重因素制约价格走势
PokePay加密卡2026完整指南:申请开卡全攻略+多场景应用技巧
为何比特币BTC价格跌破7.3万美元?一文拆解影响近期比特币行情的五大原因
Pharos(PROS)币是什么?如何参与?PROS币代币经济学和参与指南
比特币(BTC)与黄金在英国相遇:21Shares将BOLD基金引入伦敦
新手如何购买比特币?2026年新手在币安购买比特币的完整教程
迷你网名古风男生霸气(精选100个)
GPT5.6惨遭切脑,Fable 5回归要变弱鸡版?
《梦幻西游》特殊鬼怪怎么抓-隐藏变异鬼应对要点
文雅简易网名男生可爱(精选100个)
王者荣耀「西行封妖记」【孙权-仙扇使者】6月25日上线!
动漫《恶之华》剧情介绍
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc