PYTHON将list或/dict对象写入txt/json文件

for循环需要的时间太长,简化时间的一种策略,字典

不能直接将list或dict对象进行写入,会出现typeError。

一、写list到txt文件:

[python]  view plain  copy
  1. ipTable = ['158.59.194.213''18.9.14.13''58.59.14.21']  
  2. fileObject = open('sampleList.txt''w')  
  3. for ip in ipTable:  
  4.     fileObject.write(ip)  
  5.     fileObject.write('\n')  
  6. fileObject.close()  

二、写dict对象到json文件

需要import json,将dict转为字符串后写入json文件

[html]  view plain  copy
  1. dictObj = {  
  2.     'andy':{  
  3.         'age': 23,  
  4.         'city': 'shanghai',  
  5.         'skill': 'python'  
  6.     },  
  7.     'william': {  
  8.         'age': 33,  
  9.         'city': 'hangzhou',  
  10.         'skill': 'js'  
  11.     }  
  12. }  
  13.   
  14. jsObj = json.dumps(dictObj)  
  15.   
  16. fileObject = open('jsonFile.json', 'w')  
  17. fileObject.write(jsObj)  
  18. fileObject.close()  

原来那篇是用另一个编辑器写的,写的代码看起来比较乱,效果很差,我自己看着都觉得很恶心,于是想要在markdown编辑器下重新编辑那篇博客,把格式问题解决了,但是csdn好像是不支持这样做,我在修改后只能当一篇新的博客发布… 
就这样吧,这篇看着舒服多了,两篇重复的就重复了吧,不是我本意…


一、读取.json格式文件并将数据保存到字典中:

数据文件:hg.json

{"商家名称": "珍滋味港式粥火锅(工体店)", "评分": 27.0, "地址": "火锅工人体育场东路丙2号中国红街3号楼2层里", "人均消费": 174, "评论数量": 2307}
{"商家名称": "井格老灶火锅(望京新世界店)", "评分": 26.2, "地址": "火锅望京广顺南大街路16号", "人均消费": 105, "评论数量": 1387}
{"商家名称": "脸谱港式火锅(酒仙桥丽都店)", "评分": 24.5, "地址": "火锅芳园西路6号一层", "人均消费": 218, "评论数量": 39}
  • 1
  • 2
  • 3

当获取的数据为上述类型,即每个字典之间以回车分割时,可以采用如下方法将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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二、保存字典数据到.json文件中

dic = {"商家名称": "井格老灶火锅(望京新世界店)", "评分": 26.2, "地址": "火锅望京广顺南大街路16号", "人均消费": 105, "评论数量": 1387}
with codecs.open('hg.json','a', 'utf-8') as outf:
    json.dump(dic, outf, ensure_ascii=False)
    outfile.write('\n')
  • 1
  • 2
  • 3
  • 4

三、在命令行中输出字典时的乱码问题

代码中中直接写:

如果字典数据中有中文的话,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)
  • 1
  • 2

四、将字符串数据转化为字典数据

两种转化方法

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

补充

一般来说,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)]
>>>


猜你喜欢

转载自blog.csdn.net/erinapple/article/details/80652389