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
相关产品推荐
相关产品推荐

