You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于catalog_uuid配对多语言CSV行并生成POST请求Payload

问题解决:多语言CSV数据的API Payload生成与发送

问题描述

现有包含英文(en)和阿拉伯文(ar)配对行的CSV文件,部分行仅含单一语言。需实现以下逻辑:

  • 若同一catalog_uuid同时存在en和ar行,生成包含row(对应en行)和nextRow(对应ar行)的Payload
  • 若仅存在en或ar行,生成仅含row的Payload
  • 将生成的Payload发送至指定API接口

修正后的Python代码

import pandas as pd
import requests
import json
import ast

HEADERS = {"Accept": "*/*", "Content-Type": "application/json"}
API_URL = "http://crawlerapi.labeb.com/api/PCCrawler/Crawl?StoreId=6021"

# 读取CSV并预处理数据
df = pd.read_csv("carrefour-uae-items-final.csv").fillna("").astype(str)

# 按catalog_uuid分组处理
for catalog_uuid, group in df.groupby("catalog_uuid"):
    # 分别获取英文和阿拉伯文行
    en_row = group[group["lang"] == "en"].iloc[0].to_dict() if "en" in group["lang"].values else None
    ar_row = group[group["lang"] == "ar"].iloc[0].to_dict() if "ar" in group["lang"].values else None
    
    payload = {}
    
    # 构建Payload
    if en_row and ar_row:
        # 同时存在两种语言,添加row和nextRow
        payload["row"] = {
            key: en_row[key] for key in ["LabebStoreId", "catalog_uuid", "lang", "cat_0_name", 
                                       "cat_1_name", "cat_2_name", "cat_3_name", "catalogname", 
                                       "description", "properties", "price", "price_before_discount", 
                                       "externallink", "Rating", "delivery", "discount", "instock"]
        }
        payload["row"]["images"] = ast.literal_eval(en_row["encoded_images"])
        
        payload["nextRow"] = {
            key: ar_row[key] for key in ["LabebStoreId", "catalog_uuid", "lang", "cat_0_name", 
                                       "cat_1_name", "cat_2_name", "cat_3_name", "catalogname", 
                                       "description", "properties", "price", "price_before_discount", 
                                       "externallink", "Rating", "delivery", "discount", "instock"]
        }
        payload["nextRow"]["images"] = ast.literal_eval(ar_row["encoded_images"])
    else:
        # 仅存在一种语言,添加row
        single_row = en_row if en_row else ar_row
        payload["row"] = {
            key: single_row[key] for key in ["LabebStoreId", "catalog_uuid", "lang", "cat_0_name", 
                                       "cat_1_name", "cat_2_name", "cat_3_name", "catalogname", 
                                       "description", "properties", "price", "price_before_discount", 
                                       "externallink", "Rating", "delivery", "discount", "instock"]
        }
        payload["row"]["images"] = ast.literal_eval(single_row["encoded_images"])
    
    # 发送请求
    print(json.dumps(payload, indent=4, ensure_ascii=False))
    response = requests.post(API_URL, headers=HEADERS, json=payload)
    print(f"Catalog UUID {catalog_uuid} 响应: {response.content.decode()}")

关键修正说明

  • 按catalog_uuid分组:避免重复处理同一商品的不同语言行,确保每个商品仅生成一次Payload并发送一次请求
  • 准确识别语言行:从分组中分别提取en和ar行,判断是否同时存在两种语言
  • 优化Payload结构:双语言场景下将en行放入row、ar行放入nextRow;单语言场景仅保留row
  • 简化代码逻辑:通过字典推导式提取字段,减少冗余代码

内容的提问来源于stack exchange,提问作者X-something

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:40:45