如何在POST请求Payload中根据CSV条件过滤BIM 360项目Services
解决方案
首先,你需要先定义CSV列名和BIM 360服务名称的映射(如果CSV列名和serviceName完全一致,可以直接复用列名,否则按需调整映射关系),然后在循环中根据当前项目的服务激活状态动态生成services列表。
修改后的代码示例
import pandas as pd import json import requests start = "https://developer.api.autodesk.com/bim360/admin/v1/projects/" end = "/users" # 定义服务映射:键是CSV中的列名,值是对应的serviceName和权限 service_mapping = { "documentManagement": {"serviceName": "documentManagement", "access": "administrator"}, "projectAdministration": {"serviceName": "projectAdministration", "access": "administrator"}, "projectManagement": {"serviceName": "projectManagement", "access": "administrator"}, "costManagement": {"serviceName": "costManagement", "access": "administrator"}, "fieldManagement": {"serviceName": "fieldManagement", "access": "administrator"}, "modelCoordination": {"serviceName": "modelCoordination", "access": "administrator"}, "insight": {"serviceName": "insight", "access": "administrator"} } # 初始化结果DataFrame post_user = pd.DataFrame() for idx, row in projects_df.iterrows(): # 动态构建services列表:仅保留CSV中值为1的激活服务 services = [] for col_name, service_info in service_mapping.items(): if row[col_name] == 1: services.append(service_info) # 构造请求Payload payload = json.dumps({ "email": "dummy@lalaland.com", "companyId": "0000", "roleIds": ["0000"], "services": services }) headers = { 'Authorization': 'Bearer ' + access_token_beta, 'Content-Type': 'application/json', 'User-Id': 'XXXXX' } project_id = row.iloc[0] # 假设DataFrame第一列是项目ID url = f"{start}{project_id}{end}" response = requests.post(url, headers=headers, data=payload) jsonAsPythonValue = json.loads(response.text) # 合并返回结果 current_df = pd.DataFrame.from_dict(pd.json_normalize(jsonAsPythonValue)) post_user = pd.concat([post_user, current_df], ignore_index=True) # 可选:保存结果到CSV # post_user.to_csv("post_user_results.csv", index=False)
关键修改说明
- 用
iterrows()遍历DataFrame,替代原有的range(len())写法,无需手动维护索引变量 - 新增
service_mapping统一管理服务信息,后续调整权限或新增服务只需修改此处 - 循环检查当前项目的服务激活状态,仅将值为1的服务加入请求的
services列表 - 用
pd.concat()替代已弃用的append()方法,符合pandas最新最佳实践 - 使用f-string拼接URL,提升代码可读性
内容的提问来源于stack exchange,提问作者Lazy_bud
相关产品推荐
相关产品推荐

