1. 程式人生 > >python 讀取與儲存json

python 讀取與儲存json

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網路傳輸速率)。

JSON在python中分別由list和dict組成。

這是用於序列化的兩個模組:

  • json: 用於字串和python資料型別間進行轉換
  • pickle: 用於python特有的型別和python的資料型別間進行轉換
  • Json模組提供了四個功能:dumps、dump、loads、load

json dumps把資料型別轉換成字串 dump把資料型別轉換成字串並存儲在檔案中 loads把字串轉換成資料型別 load把檔案開啟從字串轉換成資料型別

json是可以在不同語言之間交換資料的,而pickle只在python之間使用。json只能序列化最基本的資料型別,josn只能把常用的資料型別序列化(列表、字典、列表、字串、數字、),比如日期格式、類物件!josn就不行了。而pickle可以序列化所有的資料型別,包括類,函式都可以序列化。

import json

# Writing JSON data
with open('data.json', 'w') as f: json.dump(data, f) # Reading data back with open('data.json', 'r') as f: data = json.load(f)

字典排序

問題
你想建立一個字典,並且在迭代或序列化這個字典的時候能夠控制元素的順序。

解決方案
為了能控制一個字典中元素的順序,你可以使用 collections 模組中的 OrderedDict 類。 在迭代操作的時候它會保持元素被插入時的順序,示例如下:

from collections import OrderedDict

d = OrderedDict()
d['foo'
] = 1 d['bar'] = 2 d['spam'] = 3 d['grok'] = 4 # Outputs "foo 1", "bar 2", "spam 3", "grok 4" for key in d: print(key, d[key])

OrderedDict 內部維護著一個根據鍵插入順序排序的雙向連結串列。每次當一個新的元素插入進來的時候, 它會被放到連結串列的尾部。對於一個已經存在的鍵的重複賦值不會改變鍵的順序。

需要注意的是,一個 OrderedDict 的大小是一個普通字典的兩倍,因為它內部維護著另外一個連結串列。 所以如果你要構建一個需要大量 OrderedDict 例項的資料結構的時候(比如讀取 100,000 行 CSV 資料到一個 OrderedDict 列表中去), 那麼你就得仔細權衡一下是否使用 OrderedDict 帶來的好處要大過額外記憶體消耗的影響。

# from collections import ChainMap
# # dict(index=0,name='none',width=0,height=0,bbox=str([0,0,0,0]),gender='none',age=0,mask='none',glass='none',hat='none')
# jsonDefault=dict(bbox=str([0,0,0,0]),gender='male',age=0,mask='none',glass='none',hat='none')

# # name:檔名str,width:圖片寬int,height:圖片高int,bbox:str([0,1,2,3]),
# # gender:"male"|"female",glass:"sunglasses"|"glasses"|"none",age:年齡值int,hat:"Yes"|"No",
# jsonTemp=lambda args:'''{{"image_key":"{name}","video_name":"1","video_index":"{index}","width":{width},"height":{height},"face":[{{"id":1,"track_id":-1,"data":{bbox},"struct_type":"rect","attrs":{{"gender":"{gender}","has_glasses":"{glass}","specific_age":"{age}","has_mask":"none","Wear_a_hat":"{hat}","occlusion":"{asvisible}"}}}}]}}
# '''.format(**ChainMap(args,jsonDefault))

# # 為什麼不使用json標準的空值:null

from collections import ChainMap
# dict(index=0,name='none',width=0,height=0,bbox=str([0,0,0,0]),gender='none',age=0,mask='none',glass='none',hat='none')
jsonDefault=dict(bbox=str([0,0,0,0]),gender='male',age=0,mask='none',glass='none',hat='none')

# name:檔名str,width:圖片寬int,height:圖片高int,bbox:str([0,1,2,3]),
# gender:"male"|"female",glass:"sunglasses"|"glasses"|"none",age:年齡值int,hat:"Yes"|"No",
jsonTemp=lambda args:'''{{"image_key":"{name}","video_name":"1","video_index":"{index}","width":{width},"height":{height},"face":[{{"id":1,"track_id":-1,"data":"none","struct_type":"rect","attrs":{{"gender":"{gender}","has_glasses":"none","specific_age":"{age}","has_mask":"none","Wear_a_hat":"none","occlusion":"none","ignore":"no"}}}}]}}
'''.format(**ChainMap(args,jsonDefault))

# 為什麼不使用json標準的空值:null

# 基礎 轉換結果至指定json格式
def toJson(re_fileName):
    result = []
    for j, cur_line in enumerate(open(re_fileName).readlines()):
        (ind,sex,age,mask,glass,sunglass,hat,img) = (i.strip() for i in cur_line.strip().split('\t'))
        form=dict(index=int(float(ind)),name=img,width=72,height=72,gender='male' if int(float(sex))==1 else 'female',age=int(float(age)))
        result.append(jsonTemp(form))
    return result

re_fileName = 'filename.lst'
ipc_train_result=toJson(re_fileName)

with open('filename.json','w+') as f:
    for i in ipc_train_result:
        f.write(i)

相關推薦

python 讀取儲存json

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C、C++、Java、JavaScript、P

python讀取儲存dict().json格式檔案

這篇是不是用markdown格式寫的,顯示程式碼不太友好,csdn又不支援在原文上直接修改編輯格式,因此在markdown格式下重新將此文編輯了一遍,且內容有更新,點選即可 : http://blog.

Python 檔案讀取儲存

file1=open('pima-indians-diabetes.txt','r') file2=open('out.txt','w+') #data=file1.read() i=0 while True: line=file1.readline() tt='"'+line[

Go語言基礎(十五)—— Go語言實現json資料檔案讀取儲存

案例: package main import ( "os" "fmt" "encoding/json" "time" ) type Person2 struct { Name string Age int Sex string Hobby []string } fun

python 讀取單所有json數據寫入mongodb(單個)

pytho mongod nod from mon eset fin 註意 $set <--------------主函數------------------->from pymongo import MongoClientfrom bson.objectid

自定義XML格式讀取儲存

背景         本人頭一回寫部落格,請大家多多關照。通過讀取XML檔案獲取使用者管理許可權,其中涉及三部分: 1.XML檔案的生成; 2.XML檔案的讀取; 3.XML檔案的儲存; 如何做 第一步:自己先將XML檔案格式列出來。  XML格

iOS開發技巧之:相簿中的GIF圖片的讀取儲存

大家都知道iOS的系統相簿是不支援gif圖片預覽的。但是,這並不代表系統相簿不能儲存和讀取gif圖片。通過Safari長按gif圖片,選擇儲存到相簿,這時儲存到相簿裡的圖片就是gif的,雖然它不會動。 下面將介紹如何對系統相簿進行gif的讀取與儲存。 什麼是 UTI iOS系統相

nrrd格式用Python讀取儲存為png圖片

安裝pynrrd pip install pynrrd pip install git+https://github.com/mhe/pynrrd.git cd pynrrd pip install . 如果報錯了,則輸入 python setup.py install 注意:

Python 讀取顯示儲存圖片----python skimage影象處理

基於python指令碼語言開發的數字圖片處理包,比如PIL,Pillow, opencv, scikit-image等。PIL和Pillow只提供最基礎的數字影象處理,功能有限;opencv實際上是一個c++庫,只是提供了python介面,更新速度非常慢。scikit-i

OpenCV中影象顯示、讀取儲存

眾所周知,opencv中的cv2.imread函式返回的影象資料,通道是BGR,而不是一般意義上的RGB;但是,這時如果用cv2.imshow進行顯示,看到的卻是正常的樣子;而如果用其他庫的顯示函式,如matplotlib的plt.imshow來顯示,則是異常的顯示,一般都是

R 語言資料讀取儲存

一、R語言讀取文字檔案: 1、檔案目錄操作:getwd() : 返回當前工作目錄setwd(“d:/data”) 更改工作目錄 2、常用的讀取指令readread.table() : 讀取文字檔案read.csv(): 讀取csv檔案如果出現缺失值,read.

opencv學習筆記一:影象讀取儲存

影象讀取函式:cv2.imread(影象路徑,標誌符) 影象路勁可以是絕對路徑和相對路徑; 識別符號有三種: cv2.IMREAD_COLOR (忽視透明度); cv2.IMREAD_GRAYSCALE(轉換成灰度影象讀取); cv2.IMREAD_UNCHANGE

Tensorflow基礎0:檔案的讀取儲存

檔案讀取流程 學習目標 目標 說明TensorFlow檔案讀取的流程 應用 無 有四種獲取資料到TensorFlow程式的方法: tf.dataAPI:輕鬆構建複雜的輸入管道。(優

32、陣列的讀取儲存

32、讀取與儲存 import numpy as np s1 = np.array(range(10)).reshape((2,5)) print(s1) np.save('./陣列',s1) 將s1 儲

python爬蟲#資料儲存#JSON/CSV/MYSQL/MongoDB/

Json資料處理 JSON支援資料格式: 物件(字典)。使用花括號。 陣列(列表)。使用方括號。 整形、浮點型、布林型別還有null型別。 字串型別(字串必須要用雙引號,不能用單引號)。 多個數據之間使用逗號分開。 注意:json本質上就是一個字串。 字典和列表轉JSON: import json boo

opencv學習筆記(2)視訊檔案的讀取儲存

main 函式輸入引數 argc、argv 的意義(參見[1]) 在學習筆記(1)中最後寫到:“在Debug完成後,應該把原始影象放到專案資料夾的 debug 資料夾中,使影象與exe程式在同一資料夾內,才能在執行程式時正確讀入並顯示影象。”其實是有誤的,影象不一定要與

Spark(五)資料讀取儲存

目錄: 5、資料讀取與儲存 5.1、檔案格式 5.1.1、文字檔案 5.1.2、JSON 5.1.3、逗號分隔值與製表符分隔值 5.1.4、SequenceFile 5.1.5、物件檔案 5.2、檔案系統 5.2.1、本地/“常規”檔案系統 5.2.3、HDF

使用python讀取寫入資料到excel表

讀取資料 # -*- coding: utf-8 -*- # @File : 讀取資料.py # @Date : 2019-01-05 # @Author : 派森帶你學python # 1.xlrd主要是用來讀取excel檔案 import xlrd # 開啟一個工作

easyui-tree資料讀取儲存

easyui版本: jQuery EasyUI 1.4.3 工具:eclipse+mysql 注:程式碼有刪除,因為是公司專案,主要是easyui-tree的獲取及儲存 表結構為:商品型別表(s

Python讀取和寫入json檔案

import jsonwith open("E://record.json","w") as f: s = json.loads('{"user":"22222","times":3,