- 文档首页
对象存储
工具指南
tosfsspec
tosfsspec 快速入门
tosfsspec 快速入门
本文旨在引导您快速上手 tosfsspec,完成环境准备、认证授权与基本的文件操作。
tosfsspec 的正常运行依赖以下核心组件,pip 会自动为您处理这些依赖的安装:
- fsspec: >= 2023.5.0,提供了文件系统规范的基类。
- tos: >= 2.8.0,火山引擎官方提供的 TOS Python SDK。
- tosnativeclient: >=1.1.13,为 tosfsspec 提供底层的高性能内核,负责网络请求、并发控制、CRC 校验等核心功能。
说明
如有对特定操作系统的支持诉求,请提交工单联系我们。 仅支持 Linux x86_64 和 MacOS arm64 系统。
- 如您已安装 Python 以及对应的 pip 工具。请确认已安装版本符合 tosfsspec 依赖说明。
- 使用 pip 可以直接安装 tosfsspec。
- 地域(Region):您的 TOS 存储桶所在的地域,例如 cn-beijing。
- 访问密钥(Access Key):包含 Access Key ID (AK) 和 Secret Access Key (SK),是访问火山引擎 API 的身份凭证。
- 访问域名(Endpoint):可选参数。如果留空,tosfsspec 会根据您提供的 region 自动生成。
- 初始化 SDK 前,您需要先配置长期访问凭证,不同操作系统下配置长期访问凭证的操作步骤如下。
export TOS_ACCESS_KEY=AKTPYmI1Z****
export TOS_SECRET_KEY=T1dJM01UU****
如果配置成功,则返回如下示例:
export TOS_ACCESS_KEY=AKTPYmI1Z****
export TOS_SECRET_KEY=T1dJM01UU****
如果配置成功,则返回如下示例:
- 初始化文件系统,以下代码用于使用 TOS 域名初始化。
key = os.getenv('TOS_ACCESS_KEY')
secret = os.getenv('TOS_SECRET_KEY')
fs = tosfsspec.TosFileSystem(
endpoint = "your endpoint",
使用 fs.open() 方法可以像操作本地文件一样读写 TOS 上的对象。它返回一个文件类对象,支持 read()、write() 等标准方法。
- 以二进制写入(wb)模式打开一个路径。当 with 代码块执行完毕后,数据会自动上传至 TOS。
key = 'path/to/your/file.txt'
full_path = f'tos://{bucket}/{key}'
data_to_write = b'Hello, tosfsspec!'
with fs.open(full_path, 'wb') as f:
print(f'文件已成功写入到: {full_path}')
with fs.open(full_path, 'rb') as f:
print(f'从文件读取到的内容: {content.decode()}')
TosFileSystem 提供了丰富的文件系统操作方法。
- 当路径为根目录 / 或空字符串 '' 时,fs.ls()会列出您账户下所有的存储桶。
- fs.ls() 方法用于列出指定路径下的文件和目录。
fs.touch(f'tos://{bucket}/data/file1.txt')
fs.touch(f'tos://{bucket}/data/file2.csv')
fs.makedirs(f'tos://{bucket}/data/images/')
fs.touch(f'tos://{bucket}/data/images/photo.jpg')
print(f'--- ls tos://{bucket}/data/ ---')
file_list = fs.ls(f'tos://{bucket}/data/')
print(f"- {item['name']} (type: {item['type']}, size: {item['size']})")
--- ls tos://your-bucket/data/ ---
- your-bucket/data/file1.txt (type: file, size: 0)
- your-bucket/data/file2.csv (type: file, size: 0)
- your-bucket/data/images (type: directory, size: 0)
- 使用 fs.put() 和 fs.get() 可以在本地文件系统和 TOS 之间传输完整文件。
local_file_path = 'local_example.txt'
with open(local_file_path, 'w') as f:
f.write('This is a local file.')
remote_path_for_put = f'tos://{bucket}/uploads/uploaded_file.txt'
fs.put(local_file_path, remote_path_for_put)
print(f'{local_file_path} 已上传至 {remote_path_for_put}')
local_download_path = 'downloaded_from_tos.txt'
fs.get(remote_path_for_put, local_download_path)
print(f'{remote_path_for_put} 已下载至 {local_download_path}')
with open(local_download_path, 'r') as f:
print(f'下载的文件内容: {f.read()}')
os.remove(local_file_path)
os.remove(local_download_path)
src_path = f'tos://{bucket}/data/file1.txt'
dst_path = f'tos://{bucket}/data/file1_copy.txt'
fs.cp(src_path, dst_path)
print(f'文件已复制: {fs.exists(dst_path)}')
mv_dst = f'tos://{bucket}/data/file1_renamed.txt'
print(f'原文件是否存在: {fs.exists(mv_src)}')
print(f'新文件是否存在: {fs.exists(mv_dst)}')
exists = fs.exists(mv_dst)
print(f'重命名后的文件是否存在: {exists}')
fs.rm(f'tos://{bucket}/data/', recursive=True)
exists = fs.exists(f'tos://{bucket}/data/')
print(f'data 目录是否存在: {exists}')
- 使用 fs.walk() 和 fs.glob() 可以实现复杂的对象查找。
- fs.walk(): 递归遍历指定目录下的所有对象和子目录。
- fs.glob(): 使用通配符模式(如 * 和 **)查找匹配的对象。
fs.makedirs(f'tos://{bucket}/glob_test/a/b/')
fs.touch(f'tos://{bucket}/glob_test/a/file.txt')
fs.touch(f'tos://{bucket}/glob_test/a/b/file.log')
for root, dirs, files in fs.walk(f'tos://{bucket}/glob_test/'):
print(f'Root: {root}, Dirs: {dirs}, Files: {files}')
log_files = fs.glob(f'tos://{bucket}/glob_test/**/*.log')
print(f'找到的 .log 文件: {log_files}')
- 获取元信息与检查存在性 (info/exists)
- info() 或 stat(): 获取文件或目录的详细信息。
path_to_check = f'tos://{bucket}/data/file1.txt'
if fs.exists(path_to_check):
print(f'{path_to_check} 存在。')
info = fs.info(path_to_check)
print(f'{path_to_check} 不存在。')
最近更新时间:2026.09.18 18:48:43