如何用Python直接将Pandas DataFrame上传至SharePoint(无本地存储)
已知情况:
- 脚本可正常创建SharePoint目录/文件夹,认证流程无问题
- 相对URL已验证正确,此前用该URL成功创建过目录
- df1为待上传数据的DataFrame
- 代码运行无报错,但SharePoint中未出现上传的文件
原代码:
site_url = 'https://{Name}.sharepoint.com/sites/{SiteName}' relative_url = f'Documents/Shared Documents/test' context = ClientContext(site_url).with_credentials(ClientCredential(sharepoint_clientID, sharepoint_clientSecret)) try: target_folder = context.web.get_folder_by_server_relative_url(relative_url) buffer = BytesIO() df1.to_csv(buffer, index=False) buffer.seek(0) file_content = buffer.read() file_name = 'test.csv' target_folder.upload_file(file_name, file_content).execute_query() except Exception as e: print('Problem uploading to Sharepoint: ', e)
排查与修复方案
修正文件夹路径定位逻辑
原代码直接用相对路径获取文件夹可能存在前缀缺失问题,建议通过文档库标题定位后再获取文件夹,确保路径准确:# 替换原target_folder获取代码 doc_lib = context.web.get_list_by_title("Shared Documents") target_folder = doc_lib.root_folder.folders.get_by_url("test") context.load(target_folder) context.execute_query() # 验证文件夹存在验证BytesIO内容完整性
在上传前确认buffer中的CSV数据正常,避免数据为空或格式错误:buffer = BytesIO() df1.to_csv(buffer, index=False) buffer.seek(0) # 打印前几行确认数据 print(buffer.readline().decode('utf-8')) buffer.seek(0) # 重置指针后再执行上传显式加载并验证文件夹
原代码未加载文件夹对象就执行上传,可能路径错误但未触发异常,添加加载步骤:target_folder = context.web.get_folder_by_server_relative_url(relative_url) context.load(target_folder) context.execute_query() # 确认文件夹存在后再上传直接传入BytesIO对象上传
尝试跳过read()步骤,直接将BytesIO对象传入upload_file,避免指针操作可能导致的问题:buffer = BytesIO() df1.to_csv(buffer, index=False) buffer.seek(0) target_folder.upload_file(file_name, buffer).execute_query()
内容的提问来源于stack exchange,提问作者Aidan Goldie
相关产品推荐
相关产品推荐

