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

Python中如何将CSV文件转换为指定结构字典并导出YAML

是的,你需要遍历每行记录重构字典结构,同时额外处理空值和allowed字段的拆分逻辑,完整实现代码如下:

import pandas as pd
import yaml

# 读取CSV,指定分隔符,空值替换为空字符串
df = pd.read_csv("test.csv", sep="|", keep_default_na=False)
records = df.to_dict(orient='records')

# 重构目标字典(匹配你期望的YAML输出结构)
result_dict = {}
for row in records:
    field_name = row.pop('fieldname')
    # 处理allowed字段,非空则拆为列表
    if row['allowed']:
        row['allowed'] = row['allowed'].split(',')
    result_dict[field_name] = row

# 输出字典
print(result_dict)

# 导出YAML,关闭key排序保证字段顺序符合预期
with open('output.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(result_dict, f, sort_keys=False, default_flow_style=False, allow_unicode=True)

运行后得到的result_dict结构为:

{
    'field_A': {'type': 'String', 'allowed': ['10', '20', '30'], 'coerce': 'to_str'},
    'field_B': {'type': 'Integer', 'allowed': '', 'coerce': 'to_int'}
}

导出的YAML内容和你预期完全一致:

field_A:
  type: String
  allowed:
  - '10'
  - '20'
  - '30'
  coerce: to_str
field_B:
  type: Integer
  allowed: ''
  coerce: to_int

如果你需要和你示例中完全一致的列表嵌套字典结构,仅需将重构逻辑调整为:

result_list = []
for row in records:
    field_name = row.pop('fieldname')
    if row['allowed']:
        row['allowed'] = row['allowed'].split(',')
    result_list.append({field_name: row})

注意该结构导出的YAML会自动携带列表标识-,和你给出的预期YAML输出结构不匹配,建议根据实际需求选择结构即可。

内容的提问来源于stack exchange,提问作者Aady

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:03