读取和存储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:
1
2
3
4
5
6
7
8
9
10
|
# -*- 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文件中
1
2
3
4
|
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是无法正常显示中文的,可通过下面的方法格式化输出字典数据:
1
2
|
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 )) |
将字符串数据转化为字典数据
两种转化方法
1
2
3
|
user = "{'name' : 'LiHua', 'sex' : 'male', 'age': 18}" dic1 = eval (user) exec ( "dic2=" + user) |
补充
一般来说,json解码时会从所提供的数据中创建出字典或者列表,如果想创建其它类型的对象,可以为json.loads()方法提供object_pairs_hook或者object_hook参数。下面的示例展示了我们应该如何将json数据解码为OrderedDict(有序字典),这样可以保持数据的顺序不变。
1
2
3
4
5
6
|
>>> 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文件中,以方便后面数据的使用
1
2
|
with open ( './medical.json' , 'w' ,encoding = 'utf-8' ) as fp: json.dump(data, fp) |
但得到的最终数据却是这样:
本来应该是正常的中文字符串,却是ASCII编码,因此在dump方法中添加一个ensure_ascii参数,原因是dump()方法将字典转化为字符串,会默认将其中unicode码以ascii编码的方式输入到字符串中
1
2
|
with open ( './medical.json' , 'w' ,encoding = 'utf-8' ) as fp: json.dump(data, fp,ensure_ascii = False ) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_23926575/article/details/76566209