首頁 > 軟體

python如何讀取和儲存dict()與.json格式檔案

2022-06-24 22:01:00

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

讀取.json格式檔案並將資料儲存到字典中

資料檔案:hg.json

{"商家名稱": "珍滋味港式粥火鍋(工體店)", "評分": 27.0, "地址": "火鍋工人體育場東路丙2號中國紅街3號樓2層裡", "人均消費": 174, "評論數量": 2307}{"商家名稱": "井格老灶火鍋(望京新世界店)", "評分": 26.2, "地址": "火鍋望京廣順南大街路16號", "人均消費": 105, "評論數量": 1387}{"商家名稱": "臉譜港式火鍋(酒仙橋麗都店)", "評分": 24.5, "地址": "火鍋芳園西路6號一層", "人均消費": 218, "評論數量": 39}

針對上述資料,可以採用如下方法將json編碼的字串轉換為python資料結構dict:

# -*- coding: utf-8 -*-
import json
import codecs

data = []
with codecs.open("hg.json", "r", "utf-8") as f:
    for line in f:
        dic = json.loads(line)
        data.append(dic)
        print(json.dumps(dic, indent=4, ensure_ascii=False, encoding='utf-8'))

儲存字典資料到.json檔案中

dic = {"商家名稱": "井格老灶火鍋(望京新世界店)", "評分": 26.2, "地址": "火鍋望京廣順南大街路16號", "人均消費": 105, "評論數量": 1387}
with codecs.open('hg.json','a', 'utf-8') as outf:
    json.dump(dic, outf, ensure_ascii=False)
    outf.write('n')

在命令列中輸出字典時的亂碼問題

如果字典資料中有中文的話,print dic是無法正常顯示中文的,可通過下面的方法格式化輸出字典資料:

dic = {"北京": [446, 208.7, 110000], "天津": [454.2, 219.8, 120000], "上海": [498.6, 319.7, 310000]}
print(json.dumps(dic, ensure_ascii=False, encoding='utf-8', indent=4))

將字串資料轉化為字典資料

兩種轉化方法

user = "{'name' : 'LiHua', 'sex' : 'male', 'age': 18}"
dic1 = eval(user)
exec("dic2="+user)

補充

一般來說,json解碼時會從所提供的資料中建立出字典或者列表,如果想建立其它型別的物件,可以為json.loads()方法提供object_pairs_hook或者object_hook引數。下面的範例展示了我們應該如何將json資料解碼為OrderedDict(有序字典),這樣可以保持資料的順序不變。

>>> s = '{"name":"ACME", "SHARES":50, "PRICE":490}'
>>> from collections import OrderedDict
>>> data = json.load(s, object_pairs_hook=OrderedDict)
>>> data
OrderedDict([('name', 'ACME'), ('shares', 50), ('price', 490)]
>>>

將dict資料寫入json檔案中

現在獲取一個醫藥網站的資料,最終轉換成dict型別,需要將資料寫入JSON檔案中,以方便後面資料的使用

with open('./medical.json', 'w',encoding='utf-8') as fp:
   json.dump(data, fp)

但得到的最終資料卻是這樣:

本來應該是正常的中文字串,卻是ASCII編碼,因此在dump方法中新增一個ensure_ascii引數,原因是dump()方法將字典轉化為字串,會預設將其中unicode碼以ascii編碼的方式輸入到字串中

with open('./medical.json', 'w',encoding='utf-8') as fp:
   json.dump(data, fp,ensure_ascii=False)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com