You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python无需知晓文件名和下载URL读取OneDrive文件夹内所有文件

解决方案

直接下载整个文件夹的方法

完全可以不用获取单个文件的下载URL,也不需要提前知晓所有文件名,两种可行方案:

  • 桌面端同步:将目标文件夹添加到OneDrive本地同步列表,开启同步后所有文件会自动下载到本地对应目录,全程不需要操作任何下载链接。
  • 网页端批量下载:登录OneDrive网页版,右键点击目标文件夹选择「下载」,平台会自动将整个文件夹打包为ZIP文件输出,不需要单独处理单个文件。

Python无感知读取/下载的实现

不需要提前知道文件名和下载URL,通过调用Microsoft Graph API即可实现全自动操作,步骤如下:

前置准备

  1. 在Azure应用注册门户创建应用,获取tenant_id、client_id、client_secret,为应用分配Files.Read.All等对应OneDrive访问权限。
  2. 安装依赖库:
pip install msgraph-core azure-identity

示例代码

from azure.identity import ClientSecretCredential
from msgraph.core import GraphClient

# 替换为自身应用凭证
credential = ClientSecretCredential(
    tenant_id="YOUR_TENANT_ID",
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET"
)
graph_client = GraphClient(credential=credential)

# 替换为目标驱动器ID和文件夹路径
drive_id = "YOUR_DRIVE_ID"
folder_relative_path = "target/folder/path"

# 自动拉取文件夹下所有子项
folder_endpoint = f"/drives/{drive_id}/root:/{folder_relative_path}:/children"
folder_items = graph_client.get(folder_endpoint).json()

for item in folder_items.get("value", []):
    # 仅处理文件,跳过子文件夹(如需嵌套遍历可添加递归逻辑)
    if "file" not in item:
        continue
    # 自动获取文件ID拉取内容,无需手动拼接下载URL
    file_content = graph_client.get(f"/drives/{drive_id}/items/{item['id']}/content").content
    # 可自定义处理逻辑:如直接解析内容,或保存到本地
    with open(item["name"], "wb") as f:
        f.write(file_content)

注意事项

  • 个人版OneDrive可将认证方式替换为设备码认证或用户名密码认证,文件拉取逻辑完全一致。
  • 如需遍历多层嵌套文件夹,添加递归逻辑判断子项类型即可,无需额外手动获取任何信息。
  • 所有文件名、文件访问路径都由接口自动返回,全程不需要提前知晓任何文件相关信息。

内容的提问来源于stack exchange,提问作者Sonia Portillo Clota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:45:04