我正在尝试使用python修改/更新yaml配置文件。 想要修改的部分是字典,这里有一个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()
通过使用此代码,我有以下例外: TypeError:数据类型不理解 /转储文件时。另一方面,当我在代码中创建字典时,如下所示:
d = {-1: 'Unknown zone',
1: 'catchment_zone_01',
2: 'catchment_zone_02'}
config['DEFAULT']['zoneID_dict'] = d
不再引发异常。
由于这个项目的上下文,我必须使用YAML文件并从具有数百行的CSV文件中加载字典信息(我将使用pandas清理),所以任何关于我做错的想法?< / p>
先谢谢大家!
答案 0 :(得分:0)
我发现问题,似乎当我尝试转储新文件时,yaml.dump无法识别由pandas分配给整数的数据类型。因此,我们可以通过在创建字典时添加强制转换来解决此问题:
config['DEFAULT']['zoneID_dict'] = {int(x): y for x, y in zip(df['zone_ID'].tolist(), df['zone_name'].tolist())}