从SharePoint读取CSV到DataFrame并重新上传为CSV的方法求助
一、使用SharePy上传
如果已经能用SharePy读取数据,上传时需先获取请求验证令牌,并正确构造上传请求:
import sharepy # 初始化连接(能正常读取数据的话这步无需改动) s = sharepy.connect("你的SharePoint站点URL") # 获取X-RequestDigest令牌 digest_url = "你的SharePoint站点URL/_api/contextinfo" digest_response = s.post(digest_url) request_digest = digest_response.json()["FormDigestValue"] # 配置上传参数 本地文件路径 = "local-file.txt" 上传接口URL = "你的SharePoint站点URL/_api/web/GetFolderByServerRelativeUrl('Shared%20Documents')/Files/add(url='uploaded-file.txt', overwrite=true)" # 执行上传 with open(本地文件路径, "rb") as f: headers = { "X-RequestDigest": request_digest, "Content-Type": "application/octet-stream" } response = s.post(上传接口URL, data=f, headers=headers) # 验证结果 if response.status_code == 200: print("上传成功") else: print(f"上传失败,状态码:{response.status_code}")
二、使用Office365-REST-Python-Client(推荐)
这个库对SharePoint操作封装更完善,官方支持性更强:
- 安装依赖:
pip install office365-rest-python-client
- 上传代码示例:
from office365.sharepoint.client_context import ClientContext from office365.runtime.auth.user_credential import UserCredential # 配置信息 站点URL = "你的SharePoint站点URL" 用户名 = "你的账号" 密码 = "你的密码" 文档库名称 = "Shared Documents" 本地文件路径 = "local-file.txt" 远程文件名 = "uploaded-file.txt" # 初始化上下文 ctx = ClientContext(站点URL).with_credentials(UserCredential(用户名, 密码)) # 获取目标文件夹并上传文件 目标文件夹 = ctx.web.get_folder_by_server_relative_url(文档库名称) with open(本地文件路径, "rb") as f: 目标文件夹.upload_file(远程文件名, f).execute_query() print("上传完成")
三、使用Microsoft Graph API + Requests
适合需要更灵活控制的场景,需先获取Access Token:
import requests # 配置信息 租户ID = "你的租户ID" 客户端ID = "你的客户端ID" 客户端密钥 = "你的客户端密钥" 站点ID = "你的SharePoint站点ID" 驱动器ID = "文档库对应的驱动器ID(可通过Graph API查询,或用默认值'documents')" 本地文件路径 = "local-file.txt" 远程文件路径 = "/Shared Documents/uploaded-file.txt" # 获取Access Token token_url = f"https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token" token_data = { "grant_type": "client_credentials", "client_id": 客户端ID, "client_secret": 客户端密钥, "scope": "https://graph.microsoft.com/.default" } token_response = requests.post(token_url, data=token_data) access_token = token_response.json()["access_token"] # 执行上传 upload_url = f"https://graph.microsoft.com/v1.0/sites/{站点ID}/drives/{驱动器ID}/root:{远程文件路径}:/content" headers = { "Authorization": f"Bearer {access_token}" } with open(本地文件路径, "rb") as f: response = requests.put(upload_url, headers=headers, data=f) if response.status_code in [200, 201]: print("上传成功") else: print(f"上传失败:{response.text}")
内容的提问来源于stack exchange,提问作者Hugo Rechatin
相关产品推荐
相关产品推荐

