
本文介绍如何在导出csv前,利用预定义字典将api返回的哈希型sku id(如"efccb6f7")实时替换为对应的人类可读产品名称(如"product 1"),确保生成的csv文件内容清晰、业务友好。
本文介绍如何在导出csv前,利用预定义字典将api返回的哈希型sku id(如"efccb6f7")实时替换为对应的人类可读产品名称(如"product 1"),确保生成的csv文件内容清晰、业务友好。
在实际集成场景中,许多云服务API(如Microsoft Graph)返回的许可证或产品标识采用不可读的哈希字符串(如"efccb6f7"),直接写入CSV会极大降低数据可维护性与业务可理解性。解决该问题的核心思路是:构建哈希值到语义化名称的映射字典,并在写入CSV前完成批量转换。
以下是一个完整、健壮的实现方案:
import csv
# 定义哈希值 → 产品名称的映射关系(建议从配置文件或数据库动态加载)
SKU_MAP = {
"efccb6f7": "Product 1",
"6050e30712fa": "Product 2",
"f8a100f": "Product 3",
# 可按需扩展,支持任意长度哈希值
}
def export_to_csv(users):
with open('/tmp/users.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# 写入表头
writer.writerow(['User Name', 'Assigned Products'])
for user in users:
# ✅ 关键修正:使用 SKU_MAP.get() 提供安全回退,避免 KeyError
product_names = [
SKU_MAP.get(license_id, f"[Unknown: {license_id}]")
for license_id in user.get('assignedLicenses', [])
]
# 将多个产品名用逗号连接(也可改用分号或换行符,视Excel兼容性而定)
products_str = ", ".join(product_names)
writer.writerow([
user.get('userPrincipalName', 'N/A'),
products_str
])⚠️ 注意事项与最佳实践:
-
字典访问安全:原代码中误用了
SKU_ID.get(...)(变量名应为SKU_MAP),且未处理缺失键。务必使用SKU_MAP.get(key, default)替代直接索引SKU_MAP[key],防止因未知哈希值导致程序崩溃。 -
字段健壮性:使用
.get('key', 'default')访问嵌套字段(如user.get('assignedLicenses', [])),避免KeyError或TypeError。 -
编码声明:显式指定
encoding='utf-8',确保中文产品名等特殊字符正确写入。 -
扩展建议:生产环境中,
SKU_MAP应通过配置文件(如JSON/YAML)、环境变量或API动态获取,而非硬编码,便于后续维护与多租户适配。 -
调试技巧:首次运行时可打印未命中项(如
if license_id not in SKU_MAP: print(f"Missing mapping: {license_id}")),快速发现映射遗漏。
最终生成的 users.csv 内容示例:
User Name,Assigned Products John,"Product 1, Product 2" Sam,Product 3
该方案简洁高效,兼顾可读性、健壮性与可维护性,适用于各类基于哈希标识的数据导出场景。


















