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

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



# 将dict对象格式化输出成字符串
"""
author:kaluluosi
date:2015-11-02

dump pyton object to string and format it.

"""

_lines = []
indent=4

def tab(depth=0):
    return ' '*indent*depth

def toStr(s):
    return "\"%s\""%s

def islambda(s):
    return 'lambda' in s

def 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 c



def 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()
导出结果
{
    "a":1,
    1:"2",
    2:{
        1:1,
        2:2,
    },
    3:[
        1,
        2,
        4,
        5,
        6,
        7,
    ],
    4:lambda :print('a'),
}
 
  

你可能感兴趣的:(Python)