最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python加載帶有注釋的Json文件實例

 更新時間:2018年05月23日 14:40:07   作者:foolishwolfx  
今天小編就為大家分享一篇Python加載帶有注釋的Json文件實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

由于json文件不支持注釋,所以如果在json文件中標(biāo)記了注釋,則使用python中的json.dump()無法加載該json文件。

本文旨在解決當(dāng)定義“//”為json注釋時,如何正確解析有注釋的json文件。

程序?qū)崿F(xiàn)

# encoding: utf-8
import json
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
CAUTION_PRINT_HEAD = 'caution: '
# 創(chuàng)建一個xstr類,用于處理從文件中讀出的字符串
class xstr:
 def __init__(self, instr):
  self.instr = instr
 # 刪除“//”標(biāo)志后的注釋
 def rmCmt(self): 
  qtCnt = cmtPos = slashPos = 0
  rearLine = self.instr
  # rearline: 前一個“//”之后的字符串,
  # 雙引號里的“//”不是注釋標(biāo)志,所以遇到這種情況,仍需繼續(xù)查找后續(xù)的“//”
  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]): # 如果雙引號沒有被轉(zhuǎn)義
     qtCnt += 1 # 雙引號的數(shù)量加1
    headLine = headLine[qtPos+1:]
    # print qtCnt
   if qtCnt % 2 == 0: # 如果雙引號的數(shù)量為偶數(shù),則說明“//”是注釋標(biāo)志
    # print self.instr[:cmtPos]
    return self.instr[:cmtPos]
   rearLine = rearLine[slashPos+2:]
   # print rearLine
   cmtPos += 2
  # print self.instr
  return self.instr
 # 判斷是否為轉(zhuǎn)義字符
 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文件實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    這篇文章主要介紹了python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法,可實現(xiàn)針對文件夾及文件內(nèi)關(guān)鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • 分享幾種python 變量合并方法

    分享幾種python 變量合并方法

    這篇文章主要介紹了分享python 變量的合并幾種方法,分享內(nèi)容有l(wèi)ist 合并和str 合并以及dict 合并的分析,下面具體方法介紹,需要的小伙伴可以參考一下
    2022-03-03
  • Python爬蟲爬取新浪微博內(nèi)容示例【基于代理IP】

    Python爬蟲爬取新浪微博內(nèi)容示例【基于代理IP】

    這篇文章主要介紹了Python爬蟲爬取新浪微博內(nèi)容,結(jié)合實例形式分析了Python基于代理IP實現(xiàn)的微博爬取與抓包分析相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • python PaddleOCR庫用法及知識點詳解

    python PaddleOCR庫用法及知識點詳解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python PaddleOCR庫用法及知識點詳解內(nèi)容,對此有需要的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • Pyecharts V1和V0.5之間相互切換的方法

    Pyecharts V1和V0.5之間相互切換的方法

    這篇文章主要介紹了Pyecharts V1和V0.5之間相互切換的方法,Pyecharts這個可視化庫火爆,官方如是說:Echarts 是一個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計,得到了眾多開發(fā)者的認(rèn)可,下面和小編一起進入文章了解具體內(nèi)容吧
    2022-02-02
  • 用python制作游戲外掛

    用python制作游戲外掛

    玩過電腦游戲的同學(xué)對于外掛肯定不陌生,但是你在用外掛的時候有沒有想過如何做一個外掛呢?那我們就來看一下如何用python來制作一個外掛
    2018-01-01
  • Django框架教程之正則表達(dá)式URL誤區(qū)詳解

    Django框架教程之正則表達(dá)式URL誤區(qū)詳解

    正則表達(dá)式對大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Django框架教程之正則表達(dá)式URL誤區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • python optparse模塊使用實例

    python optparse模塊使用實例

    這篇文章主要介紹了python optparse模塊使用實例,optparse是專門來處理命令行選項的,本文就講解了它的使用方法,需要的朋友可以參考下
    2015-04-04
  • 基于Python檢測動態(tài)物體顏色過程解析

    基于Python檢測動態(tài)物體顏色過程解析

    這篇文章主要介紹了基于Python檢測動態(tài)物體顏色過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 淺談dataframe中更改列屬性的方法

    淺談dataframe中更改列屬性的方法

    今天小編就為大家分享一篇淺談dataframe中更改列屬性的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

洛宁县| 高唐县| 繁峙县| 青田县| 和静县| 和龙市| 伊通| 平遥县| 肇庆市| 杭锦后旗| 长阳| 遵化市| 商河县| 福州市| 绍兴市| 彭山县| 中阳县| 定兴县| 涿州市| 道真| 西安市| 水城县| 厦门市| 方正县| 酒泉市| 澄江县| 阳东县| 方正县| 韩城市| 莱西市| 改则县| 巨野县| 西充县| 濉溪县| 绥宁县| 洛川县| 中超| 林州市| 温宿县| 迁安市| 平邑县|