我有一个Python测试脚本,需要一个配置文件。该配置文件应该是JSON格式的。
但我的一些测试脚本用户不喜欢JSON格式,因为它难以阅读。
所以我更改了我的测试脚本,让它期望配置文件为YAML格式,然后将YAML文件转换为JSON文件。
我希望加载配置文件的函数能够处理JSON和YAML两种格式。在yaml或json模块中是否有一种方法可以给出布尔响应来判断配置文件是JSON还是YAML?
我现在的解决方法是使用两个try/except子句。
现在,我在互联网上找到了一个名为isityaml的Python模块,可以用来测试YAML格式。但我宁愿不安装另一个软件包,因为我需要在几个测试主机上安装它。
json和yaml模块是否有一种方法可以返回布尔值来测试它们各自的格式?
但我的一些测试脚本用户不喜欢JSON格式,因为它难以阅读。
所以我更改了我的测试脚本,让它期望配置文件为YAML格式,然后将YAML文件转换为JSON文件。
我希望加载配置文件的函数能够处理JSON和YAML两种格式。在yaml或json模块中是否有一种方法可以给出布尔响应来判断配置文件是JSON还是YAML?
我现在的解决方法是使用两个try/except子句。
import os
import json
import yaml
# This is the configuration file - my script gets it from argparser but in
# this example, let's just say it is some file that I don't know what the format
# is
config_file = "some_config_file"
in_fh = open(config_file, "r")
config_dict = dict()
valid_json = True
valid_yaml = True
try:
config_dict = json.load(in_fh)
except:
print "Error trying to load the config file in JSON format"
valid_json = False
try:
config_dict = yaml.load(in_fh)
except:
print "Error trying to load the config file in YAML format"
valid_yaml = False
in_fh.close()
if not valid_yaml and not valid_json:
print "The config file is neither JSON or YAML"
sys.exit(1)
现在,我在互联网上找到了一个名为isityaml的Python模块,可以用来测试YAML格式。但我宁愿不安装另一个软件包,因为我需要在几个测试主机上安装它。
json和yaml模块是否有一种方法可以返回布尔值来测试它们各自的格式?
config_file = "sample_config_file"
# I would like some method like this
if json.is_json(in_fh):
config_dict = json.load(in_fh)
load()
函数来处理不受控制的数据,这是不安全的(例如,可能会导致磁盘被清除)。 - Anthonimport yaml
可推断出),它不支持YAML 1.2版本,只支持1.1。 - Anthon