在python中使用表格数据修改yaml文件中的字典

2024-06-16 10:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python修改/更新yaml配置文件。 a要修改的部分是一个字典,这里有一个yaml文件结构的示例:

DEFAULT:
    zoneID_dictionary_2:      # Usual activity place.
        -1:     'Unknown zone'
        1:      'Zone XX 01'
        2:      'Zone XX 02'
        999:    'Unknown zone'

我使用pandas加载了一个CSV文件,从中提取所需的新词典。这是我的代码摘录:

def yml_manager(config_template_file_path, output_file_path, customers_catchment_area_dict_file_path=None):

    # Load the template of the configuration file
    stream = open(config_template_file_path, 'r')
    config = yaml.load(stream=stream)

    # Update directories
    config['DEFAULT']['dir_path_1'] = '_new_path_1_'
    config['DEFAULT']['dir_path_2'] = '_new_path_2_'

    if customers_catchment_area_dict_file_path is not None:
        df = pandas.read_csv(customers_catchment_area_dict_file_path, sep=';') 
        config['DEFAULT']['zoneID_dict'] = {x: y for x, y in zip(df['zone_ID'].tolist(), df['zone_name'].tolist())}

    with open(output_file_path, 'w') as yml_file:
        yml_file.write(yaml.dump(data=config, default_flow_style=False))
        yml_file.close()

通过使用此代码,我有以下异常:类型错误:转储文件时无法理解数据类型。另一方面,当我在代码中创建字典时,如下所示:

    d = {-1: 'Unknown zone',
         1: 'catchment_zone_01',
         2: 'catchment_zone_02'}
    config['DEFAULT']['zoneID_dict'] = d

不再引发异常。你知道吗

由于这个项目的上下文,我必须使用YAML文件,并从一个CSV文件中加载字典信息,该文件有数百行(我将使用pandas清理),所以有没有关于我做错了什么的想法?你知道吗

提前谢谢各位!你知道吗


Tags: 文件path代码configdefaultzoneyamlpandas
1条回答
网友
1楼 · 发布于 2024-06-16 10:41:06

我发现了问题,好像当我尝试转储新文件时,亚马尔垃圾场无法识别指定给整数的数据类型。因此,我们可以通过在创建字典时添加强制转换来解决此问题:

config['DEFAULT']['zoneID_dict'] = {int(x): y for x, y in zip(df['zone_ID'].tolist(), df['zone_name'].tolist())}

相关问题 更多 >