这篇文章将为大家详细讲解有关如何在Python中加载带有注释的Json文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。
程序实现
# encoding: utf-8 import json import re import sys reload(sys) sys.setdefaultencoding('utf8') CAUTION_PRINT_HEAD = 'caution: ' # 创建一个xstr类,用于处理从文件中读出的字符串 class xstr: def __init__(self, instr): self.instr = instr # 删除“//”标志后的注释 def rmCmt(self): qtCnt = cmtPos = slashPos = 0 rearLine = self.instr # rearline: 前一个“//”之后的字符串, # 双引号里的“//”不是注释标志,所以遇到这种情况,仍需继续查找后续的“//” while rearLine.find('//') >= 0: # 查找“//” slashPos = rearLine.find('//') cmtPos += slashPos # print 'slashPos: ' + str(slashPos) headLine = rearLine[:slashPos] while headLine.find('"') >= 0: # 查找“//”前的双引号 qtPos = headLine.find('"') if not self.isEscapeOpr(headLine[:qtPos]): # 如果双引号没有被转义 qtCnt += 1 # 双引号的数量加1 headLine = headLine[qtPos+1:] # print qtCnt if qtCnt % 2 == 0: # 如果双引号的数量为偶数,则说明“//”是注释标志 # print self.instr[:cmtPos] return self.instr[:cmtPos] rearLine = rearLine[slashPos+2:] # print rearLine cmtPos += 2 # print self.instr return self.instr # 判断是否为转义字符 def isEscapeOpr(self, instr): if len(instr) <= 0: return False cnt = 0 while instr[-1] == '\\': cnt += 1 instr = instr[:-1] if cnt % 2 == 1: return True else: return False # 从json文件的路径JsonPath读取该文件,返回json对象 def loadJson(JsonPath): try: srcJson = open(JsonPath, 'r') except: print CAUTION_PRINT_HEAD + 'cannot open ' + JsonPath quit() dstJsonStr = '' for line in srcJson.readlines(): if not re.match(r'\s*//', line) and not re.match(r'\s*\n', line): xline = xstr(line) dstJsonStr += xline.rmCmt() # print dstJsonStr dstJson = {} try: dstJson = json.loads(dstJsonStr) return dstJson except: print CAUTION_PRINT_HEAD + JsonPath + ' is not a valid json file' quit() # 带缩进地在屏幕输出json字符串 def printRes(resStr): resStr = resStr.replace(',', ',\n') resStr = resStr.replace('{', '{\n') resStr = resStr.replace(':{', ':\n{') resStr = resStr.replace('}', '\n}') resStr = resStr.replace('[', '\n[\n') resStr = resStr.replace(']', '\n]') resStr = resStr resArray = resStr.split('\n') preBlank = '' for line in resArray: if len(line) == 0: continue lastChar = line[len(line)-1] lastTwoChars = line[len(line)-2:] if lastChar in {'}', ']'} or lastTwoChars in {'},', '],'}: preBlank = preBlank[:len(preBlank)-2] try: print preBlank + line.decode('utf-8') except: print(preBlank + '[%This line cannot be decoded%]') if lastChar == '{' or lastChar == '[': preBlank += ' '*2
关于如何在Python中加载带有注释的Json文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。