將python資料結構匯出成字串並自動縮排格式化
阿新 • • 發佈:2019-02-18
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'),
}