您的位置:首页 > 理论基础 > 数据结构算法

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

2015-11-14 02:40 330 查看
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()
导出结果<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'),

}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: