Jupyter与VSCode中Office365-REST-Python-Client查询SharePoint文件结果不一致
问题现象
- 原生Jupyter Notebook运行代码,能正确获取指定SharePoint文件夹下的48个文件
- 将相同代码放到VSCode的
.py文件中运行,或在VSCode内运行Jupyter Notebook,仅返回16个文件 - 已尝试删除并重建目标SharePoint文件夹,问题仍未解决
代码示例
from office365.runtime.auth.user_credential import UserCredential from office365.sharepoint.client_context import ClientContext from office365.sharepoint.files.file import File site_root_url = "SharePoint root url folder" site_url = "SharePoint site url" ctx = ClientContext(site_url).with_credentials(UserCredential('email/login','password')) doc_lib = ctx.web.lists.get_by_title("Documents") items = doc_lib.items.select(["FileSystemObjectType"]).expand(["File", "Folder"]).get().execute_query() download_list = [] for item in items: # type: ListItem file_path = "{}{}".format(site_root_url,item.file.serverRelativeUrl) download_list.append(file_path) print(len(download_list))
解决方案
1. 处理SharePoint API分页限制
SharePoint REST API默认会分页返回结果,部分环境可能未自动处理分页逻辑。修改代码,显式遍历所有分页获取完整数据:
from office365.runtime.auth.user_credential import UserCredential from office365.sharepoint.client_context import ClientContext site_root_url = "SharePoint root url folder" site_url = "SharePoint site url" ctx = ClientContext(site_url).with_credentials(UserCredential('email/login','password')) doc_lib = ctx.web.lists.get_by_title("Documents") items = doc_lib.items.select(["FileSystemObjectType"]).expand(["File", "Folder"]) all_items = [] # 循环获取所有分页数据 while items: current_page = items.get().execute_query() all_items.extend(current_page) items = items.skip(len(all_items)) download_list = [] for item in all_items: # 仅处理文件项,排除文件夹 if hasattr(item, 'file'): file_path = "{}{}".format(site_root_url, item.file.serverRelativeUrl) download_list.append(file_path) print(len(download_list))
2. 统一依赖库版本
检查原生Jupyter和VSCode环境中office365-rest-python-client的版本是否一致,版本差异可能导致API调用行为不同:
- 在两个环境中执行
pip show office365-rest-python-client查看版本 - 统一版本:
pip install office365-rest-python-client==x.x.x(替换为一致的版本号)
3. 排查环境上下文差异
- 在VSCode中添加日志输出,打印返回的
items内容,确认是未获取到数据还是过滤逻辑问题 - 检查是否存在代理、缓存等环境差异:重启VSCode,删除Python环境的
__pycache__文件夹,强制刷新请求上下文
内容的提问来源于stack exchange,提问作者GEDS27
相关产品推荐
相关产品推荐

