python 二进制Plist文件转Xml格式Plist

来源:互联网 发布:数据库mandatory 编辑:程序博客网 时间:2024/06/12 22:14
#获取字段类型def gettype(value):    if isinstance(value,int):        if isinstance(value,bool):            return 'bool'        return 'integer'    elif isinstance(value,bytes):        try:            buff=value.decode('utf-8')#这个txt 随便写的了            txt='stringa'        except:            try:                buff=value.decode('utf-16')                txt='stringb'            except:                pass        return txt    elif isinstance(value,str):        return 'string'    elif isinstance(value,list):        return 'array'    elif isinstance(value,dict):        return 'dict'    else:        return 'Error Type:'+str(type(value))#转成str型,比较方便后面使用def tostr(key):    keytype=gettype(key)    if keytype=='stringa':        return key.decode('utf-8')    elif keytype=='stringb':        return key.decode('utf-16')    elif keytype=='string':        #声明全局变量        global strID        global strDict                strDict[strID]=key        strID=strID+1        return str.format('%04d' % (strID-1))        return key    elif keytype=='integer':        return str(key)        elif keytype=='bool':        if key==True:            return 'true'        else:            return 'false'        else:        return 'Unknow Type Return!'    #字典转字符def dict2str(dictx):    global gtab        buff=''    tabs=gettabs()    buff=buff+tabs+'<dict>\n'        gtab=gtab+1    tabs=gettabs()        for key in dictx:        buff=buff+tabs+'<key>'+tostr(key)+'</key>\n'        buff=buff+tabs                value=dictx[key]        valuetype=gettype(value)        if valuetype=='dict':            buff=buff+dict2str(value)        elif valuetype=='array':            buff=buff+list2str(value)        elif valuetype=='bool':            buff=buff+'<'+tostr(value)+'/>\n'        else:            if valuetype=='stringa' or valuetype=='stringb':                valuetype='string'            buff=buff+'<'+valuetype+'>'+tostr(value)+'</'+valuetype+'>\n'                gtab=gtab-1    tabs=gettabs()        buff=buff+tabs    buff=buff+'</dict>\n'    return buff#列表在plist的xml格式里为arraydef list2str(listx):    global gtab        buff=''    tabs=gettabs()    buff=buff+tabs+'<array>\n'        gtab=gtab+1    tabs=gettabs()        for value in listx:                valuetype=gettype(value)                if valuetype=='dict':            buff=buff+dict2str(value)        elif valuetype=='array':            buff=buff+list2str(value)        else:            print('list ')            gtab=gtab-1    tabs=gettabs()        buff=buff+tabs+'</array>\n'    return buff#缩进距离,排版xml,代码很乱。。。。。欢迎拍砖def gettabs():    buff=''    for i in range(gtab):        buff=buff+'\t'    return buff    def exporttxt(fn):        plist=biplist.readPlist(fn)    buff=dict2str(plist)    fp=open(fn[:-5]+'src','w',encoding='utf-8')    temp='''<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0">\n'''    fp.write(temp)    fp.write(buff)    fp.write('</plist>')    fp.close()    if __name__=='__main__':    import glob    import os    import biplist        strID=0    strDict={}    files=glob.glob('*.plist')    for fn in files:        if os.path.isfile(fn):            #全局变量  字符串ID            strID=0            strDict={}            gtab=0                        exporttxt(fn)        print('Over!')


	
				
		
原创粉丝点击