本文介绍如何使用 Hugging Face API 通过 Python 直接操作 Hugging Face 仓库(模型或数据集),包括上传、删除、列出文件等常见操作。这种方法比使用命令行工具更灵活,特别适合批量操作和自动化脚本。
bash展开代码pip install -U "huggingface_hub[cli]" --break-system-packages
bash展开代码export HF_TOKEN='你的Token'
python展开代码import sys
sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages') # 如果包安装在用户目录
from huggingface_hub import HfApi
import os
# 方式1: 从环境变量读取
api = HfApi(token=os.environ.get('HF_TOKEN'))
# 方式2: 直接指定(不推荐,安全性差)
api = HfApi(token='hf_xxxxxxxxxxxxx')
python展开代码cd /data/xiedong/mmdu/mmdu_val && export HF_TOKEN=xxxx && python -c "
import sys
sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages')
from huggingface_hub import HfApi
import os
api = HfApi(token=os.environ.get('HF_TOKEN', 'xxxx'))
# 上传整个文件夹
api.upload_folder(
folder_path='.', # 当前目录
repo_id='hugxd/mmdu_val', # 仓库ID: 用户名/仓库名
repo_type='dataset', # 'model' 或 'dataset'
ignore_patterns=['.git/**'] # 忽略的文件模式
)
"
参数说明:
folder_path: 要上传的本地文件夹路径repo_id: 仓库ID,格式为 用户名/仓库名repo_type: 仓库类型,'model' 或 'dataset'ignore_patterns: 要忽略的文件模式列表python展开代码cd /data/xiedong/mmdu/mmdu_val && export HF_TOKEN=xxxx && python -c "
import sys
sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages')
from huggingface_hub import HfApi
import os
api = HfApi(token=os.environ.get('HF_TOKEN', 'xxxx'))
# 要删除的文件列表
files_to_delete = [
'benchmark.json',
'mmdu-45k.json',
'mmdu-45k_pics.zip',
'mmdu_pics.zip'
]
print('开始删除无关文件...')
for file in files_to_delete:
try:
api.delete_file(
path_in_repo=file,
repo_id='hugxd/mmdu_val',
repo_type='dataset'
)
print(f'✓ 已删除: {file}')
except Exception as e:
print(f'✗ 删除失败 {file}: {e}')
print('\\n删除完成!')
"
python展开代码cd /data/xiedong/mmdu/mmdu_val && export HF_TOKEN=xxxx && python -c "
import sys
sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages')
from huggingface_hub import HfApi
import os
api = HfApi(token=os.environ.get('HF_TOKEN', 'xxxx'))
# 列出所有文件
files = api.list_repo_files('hugxd/mmdu_val', repo_type='dataset')
print(f'仓库中共有 {len(files)} 个文件:')
for f in sorted(files):
print(f)
"
python展开代码api.upload_file(
path_or_fileobj='/path/to/local/file.json',
path_in_repo='file.json', # 在仓库中的路径
repo_id='hugxd/mmdu_val',
repo_type='dataset'
)
python展开代码api.create_repo(
repo_id='hugxd/mmdu_val',
repo_type='dataset',
exist_ok=True # 如果已存在则不会报错
)
bash展开代码cd /path/to/local/folder && export HF_TOKEN=你的Token && python -c "
import sys
sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages')
from huggingface_hub import HfApi
import os
api = HfApi(token=os.environ.get('HF_TOKEN'))
# 1. 创建仓库(如果不存在)
api.create_repo(
repo_id='用户名/仓库名',
repo_type='dataset', # 或 'model'
exist_ok=True
)
# 2. 上传整个文件夹
api.upload_folder(
folder_path='.',
repo_id='用户名/仓库名',
repo_type='dataset',
ignore_patterns=['.git/**', '__pycache__/**', '*.pyc']
)
print('上传完成!')
"
当需要操作 Hugging Face 仓库时,可以使用以下提示词模板:
展开代码请使用 Hugging Face API 帮我操作仓库: 仓库信息: - 仓库ID: hugxd/mmdu_val - 仓库类型: dataset (或 model) - API Token: xxxx 操作需求: 1. [具体操作,如:上传本地文件夹 /data/xiedong/mmdu/mmdu_val] 2. [或:删除文件 benchmark.json, mmdu-45k.json] 3. [或:列出所有文件] 请使用以下格式的命令: cd [工作目录] && export HF_TOKEN=[Token] && python -c " import sys sys.path.insert(0, '/home/xd/.local/lib/python3.12/site-packages') from huggingface_hub import HfApi import os api = HfApi(token=os.environ.get('HF_TOKEN', '[Token]')) # [具体操作代码] "
path_in_repo 是文件在仓库中的相对路径,不是本地路径'model' 和 'dataset',操作时需指定正确类型A: 使用 upload_large_folder 方法,或分批上传:
python展开代码api.upload_large_folder(
folder_path='.',
repo_id='hugxd/mmdu_val',
repo_type='dataset'
)
A: 使用 ignore_patterns 参数排除不需要的文件,或使用 upload_file 逐个上传。
A: 先使用 list_repo_files 列出所有文件,然后检查目标文件是否在列表中。


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!