将python数据结构导出成字符串并自动缩进格式化

来源:互联网 发布:oracle示例数据库 编辑:程序博客网 时间:2024/06/06 00:51

python可以做轻量级服务器,因此我就想要怎么给python做导表工具,如果数据格式不用json而直接用python的格式要怎么做。于是乎就写了个类似json模块一样的工具。这个工具可以将python数据结构直接导出成字符串并格式化缩进。导出的文本直接就可以当作python脚本使用,导入到其他python脚本里就可以直接使用字典等数据了。



# 将dict对象格式化输出成字符串"""author:kaluluosidate:2015-11-02dump pyton object to string and format it."""_lines = []indent=4def tab(depth=0):    return ' '*indent*depthdef toStr(s):    return "\"%s\""%sdef islambda(s):    return 'lambda' in sdef writeline():    _lines.append('\n')def parse(obj,depth=0):    if isinstance(obj,str):        if islambda(obj):            _lines.append(obj)        else:            _lines.append(toStr(obj))    else:        if isinstance(obj,dict):            parse_dict(obj,depth)        elif isinstance(obj,list):            parse_list(obj,depth)        else:            _lines.append(str(obj))def parse_dict(dic,depth=0):    _lines.append('{') #开头    writeline() #换行    depth+=1 #缩进增加        #循环遍历所有的item    for k,v in dic.items():        _lines.append(tab(depth)) #缩进        parse(k,depth) #        _lines.append(':')        parse(v,depth) #值        _lines.append(',')        writeline() #换行    depth-=1 #缩进还原    _lines.append(tab(depth)+'}') #结束def parse_list(lst,depth=0):    _lines.append('[') #开头    writeline() #换行    depth+=1 #缩进增加        #循环遍历所有的item    for v in lst:        _lines.append(tab(depth))        parse(v,depth)        _lines.append(',')        writeline() #换行    depth-=1 #缩进还原    _lines.append(tab(depth)+']') #结束def dumps(obj,indent=True):    parse(obj)    c=''    if indent:        c = ''.join(_lines)    else:        c = ''.join([l.strip() for l in _lines])    return cdef main():    dic = { 'a':1,1:'2',2:{1:1,2:2},3:[1,2,4,5,6,7],4:"lambda :print('a')"}    c = dumps(dic,False)    print(c)    if __name__ == '__main__':    main()
导出结果<pre name="code" class="python">
{
    "a":1,
    1:"2",
    2:{
        1:1,
        2:2,
    },
    3:[
        1,
        2,
        4,
        5,
        6,
        7,
    ],
    4:lambda :print('a'),
}

0 0
原创粉丝点击