r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
wb 在windows下,以二进制进行存储,\r\n才是换行
w 是以文本方式进行存储\n是换行
rb 取出来的也是\r\n
r取出来的是\n
实例如下:
# -*- coding:utf-8 -*-
import json
import jsonpath
import time
# 1、第一种存储字典和数组
listDict = [{"city": "北京"},{"name": "小明"}]
strlist = json.dumps(listDict, ensure_ascii=False)
print type(strlist) # <type 'str'>
# 写数据
with open("listDict.json",'w') as file:
file.write(strlist)
# 2、第二种存储字典和数组
listStr = [{"city": "北京"}, {"name": "大刘"}]
json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)
dictStr = {"city": "北京", "name": "大刘"}
json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)
time.sleep(1)
# ------------ 从文件里面取数据 ---------
dictList = json.load(open("listDict.json",'r'))
# 输出北京
print dictList[0]["city"]
# ------------ 读出字典loads ----------
strDict = '{"city": "北京", "name": "大猫"}'
# <type 'dict'>
print type(json.loads(strDict))
# ----------- jsonpath的使用 ---------
jsonobj = json.loads(strDict)
# 从根节点开始,匹配name节点
citylist = jsonpath.jsonpath(jsonobj,'$..name')
# citylist数组
print citylist[0].encode('utf-8')