使用Python访问SharePoint OneDrive文件夹内容的技术求助
以下是基于官方Microsoft Graph SDK的可行解决方案,替代你尝试过的过时或有问题的库:
步骤1:安装依赖
使用官方维护的SDK包:
pip install msgraph-sdk azure-identity
步骤2:Azure AD应用配置
- 在Azure门户注册一个应用程序,获取租户ID、客户端ID、客户端密钥。
- 为应用添加应用权限:
Files.Read.All或Sites.Read.All,并要求管理员完成权限同意。
步骤3:代码实现
认证与客户端初始化
from azure.identity import ClientSecretCredential from msgraph import GraphServiceClient from msgraph.generated.drives.item.items.item.content.content_request import ContentRequest # 替换为你的实际参数 TENANT_ID = "your-tenant-id" CLIENT_ID = "your-client-id" CLIENT_SECRET = "your-client-secret" SITE_DOMAIN = "your-sharepoint-domain.sharepoint.com" SITE_PATH = "sites/your-site-name" FOLDER_PATH = "/Shared Documents/TargetFolder"
获取文件列表与内容
# 初始化认证与Graph客户端 credential = ClientSecretCredential(TENANT_ID, CLIENT_ID, CLIENT_SECRET) client = GraphServiceClient(credential) # 获取目标SharePoint站点 site = client.sites.by_site_id(f"{SITE_DOMAIN}:/{SITE_PATH}:").get() # 获取站点默认文档库驱动器 drive = client.sites.by_site_id(site.id).drive.get() # 获取指定文件夹下的所有项 folder_items = client.drives.by_drive_id(drive.id).root.item_with_path(FOLDER_PATH).children.get() # 遍历文件并输出名称与内容 for item in folder_items.value: if item.file: print(f"文件名: {item.name}") # 获取文件内容 content_req = ContentRequest( request_adapter=client._request_adapter, path_parameters={"driveId": drive.id, "itemId": item.id} ) content = content_req.get() # 文本文件直接解码,二进制文件可保存到本地 print(f"文件内容: {content.decode('utf-8')}\n")
可选:本地开发的设备码认证
如果不想使用客户端密钥,适合个人本地调试:
from azure.identity import DeviceCodeCredential credential = DeviceCodeCredential(CLIENT_ID, TENANT_ID)
关于你尝试过的方法说明
pysharepoint:第三方非官方库,维护不活跃,登录逻辑易出问题,不推荐使用。msgraph_core导入失败:该包是底层依赖,官方现在推荐使用封装更完善的msgraph-sdk,无需直接操作底层类。onedrivesdk:已被Microsoft Graph SDK完全替代,官方停止维护,属于过时方案。
内容的提问来源于stack exchange,提问作者Antanas Žilinskas
相关产品推荐
相关产品推荐

