代码理解json.dumps(config, sort_keys=True, indent=4, separators=(',', ':')

来源:互联网 发布:mysql 如何使用 编辑:程序博客网 时间:2024/06/05 15:57

最近看代码,又有看不懂的地方了,在此mark一下: 总体
编码:把一个Python对象编码转换成Json字符串 json.dumps( )
解码:把Json格式字符串解码转换成Python对象 json.loads( )

话不多说,看代码块:
加载json文件:

def load_json(path):    import json    '''    读取配置文件,并过滤掉以//开头的注释    '''    lines=[]  #将内容读入lines这个list    with open(path) as f:         for row in f.readlines():             if row.strip().startswith("//"):                continue             lines.append(row)     return json.loads("\n".join(lines))    
#输出lines的结构发现如下:['\n', '{\n', '"dataset":{\n', '    "train": {"type": "mnist", "data_set": "train", "layout_x": "tensor"},\n', '    "test": {"type": "mnist", "data_set": "test", "layout_x": "tensor"}\n', '},\n'

line的每一行都包含了换行符\n,原文本的每一行在lines这个列表中为单引号包含的每一行内容,每个元素间用逗号分隔。
我们来说一下Python中string.join()这个函数

一、函数说明

join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

1、join( )函数

语法: ‘sep’.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串
参考网址:https://www.cnblogs.com/jsplyy/p/5634640.html
参考网址:https://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html
那么(“\n”.join(lines))后的输出的形式为。中间多了每个元素之间多了一个换行,其实这里“\n”和“”都可以,因为在json.loads(“\n”.join(lines)) 和json.loads(“”.join(lines)) 这两个是等效的。

{"dataset":{    "train": {"type": "mnist", "data_set": "train", "layout_x": "tensor"},    "test": {"type": "mnist", "data_set": "test", "layout_x": "tensor"}},"train":{    "keep_model_in_mem":0,    "random_state":0,    "data_cache":{        "cache_in_disk":{            "default":1        },        "keep_in_mem":{            "default":0        },        "cache_dir":"/home/zhaopanpan/gcForest-master/result/mnist/fg-tree500-depth100-3folds/datas"    } }}

具体的代码调用如下:

if __name__ == '__main__':    args = parse_args()    # In this case ,refer to    # models/mnist/gcforest/fg-tree500-depth100-3folds.json    config = load_json(args.model)    update_default_level(logging.DEBUG)    if args.log_dir is not None:        update_default_logging_dir(args.log_dir)    from gcforest.fgnet import FGNet, FGTrainConfig    from gcforest.exp_utils import prec_ets, prec_rf, prec_log, prec_xgb, concat_datas    from gcforest.datasets import get_dataset    # 这个 LOGGER = get_logger("tools.train_fg")中tools.train_fg是由gcforest.utils.log_utils中的get_logger创建    LOGGER = get_logger("tools.train_fg")    LOGGER.info("tools.train_fg")    # json.dumps将 Python 对象编码成 JSON 字符串    LOGGER.info("\n" + json.dumps(config, sort_keys=True, indent=4, separators=(',', ':')))  # indent是缩进的意思 

相关知识点:

  • Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
  • ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
  • indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json
  • separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
  • encoding:默认是UTF-8,设置json数据的编码方式。
  • sort_keys:将数据根据keys的值进行排序。

用于排错的网址:https://www.tuicool.com/articles/YBnE3q

阅读全文
0 0
原创粉丝点击