欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

本文旨在解決當定義“//”為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
 # 刪除“//”標志后的注釋
 def rmCmt(self): 
  qtCnt = cmtPos = slashPos = 0
  rearLine = self.instr
  # rearline: 前一個“//”之后的字符串,
  # 雙引號里的“//”不是注釋標志,所以遇到這種情況,仍需繼續(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ù),則說明“//”是注釋標志
    # 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)文章

  • 解決Pytorch半精度浮點型網(wǎng)絡(luò)訓練的問題

    解決Pytorch半精度浮點型網(wǎng)絡(luò)訓練的問題

    這篇文章主要介紹了解決Pytorch半精度浮點型網(wǎng)絡(luò)訓練的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaline的python實現(xiàn)詳解

    自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaline的python實現(xiàn)詳解

    這篇文章主要介紹了自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaline的python實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • python中cv2模塊安裝詳細圖文教程

    python中cv2模塊安裝詳細圖文教程

    在Python中cv2是OpenCV庫的一個模塊,這是一個開源的計算機視覺和機器學習軟件庫,下面這篇文章主要給大家介紹了關(guān)于python中cv2模塊安裝的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 淺析Python中的變量賦值與多重賦值

    淺析Python中的變量賦值與多重賦值

    在?Python?中,變量賦值是編程中常見的操作之一,本文將深入探討?Python?中的變量賦值和多重賦值,包括其基本語法、特性、應(yīng)用場景以及示例代碼,需要的可以參考下
    2024-03-03
  • python實現(xiàn)函數(shù)極小值

    python實現(xiàn)函數(shù)極小值

    今天小編就為大家分享一篇python實現(xiàn)函數(shù)極小值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python向excel中寫入數(shù)據(jù)的方法

    Python向excel中寫入數(shù)據(jù)的方法

    這篇文章主要介紹了Python向excel中寫入數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 整理Python中的賦值運算符

    整理Python中的賦值運算符

    這篇文章主要介紹了Python中的賦值運算符,其使用是Python的基本功,需要的朋友可以參考下
    2015-05-05
  • Python中過濾字符串列表的方法

    Python中過濾字符串列表的方法

    這篇文章主要介紹了Python中過濾字符串列表的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Mac下python包管理工具pip的安裝

    Mac下python包管理工具pip的安裝

    這篇文章介紹了Mac下python包管理工具pip的安裝方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Pandas多個條件(AND,OR,NOT)中提取行

    Pandas多個條件(AND,OR,NOT)中提取行

    本文主要介紹了Pandas多個條件(AND,OR,NOT)中提取行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論