python读写json文件
‘壹’ python中json处理
python中json文件处理涉及的四个函数json.loads()、json.mps()、json.load()、json.mp()。
1)json.mps()
将一个Python数据类型dict进行json格式的编码(字典->字符串)
eg:
age_dict = {'age1':'12', 'age2':'15'}
json_info = json.mps(age_dict)
print("json_info = {}".format(json_info))
print("json_info type = {}".format(type(json_info)))
2)json.loads()
将json格式数据转换为dict(字符串->字典)
json_age ='{"age1": "12", "age2": "15"}'
dict_age = json.loads(json_info)
print("json_age = {}".format(json_age))
print("dict_age type = {}".format(str(type(dict_age))))
3)json.load()
读取文件,将里json格式字符串转化为dict
with open(test.json, 'r') as file:
contents = json.load(file)
print(contents)
4)json.mp()
将dict类型转换为json格式字符串,存入文件
number = [1, 2, 3, 5]
file = 'number.json'
with open(file , 'w') as file:
json.mp(number, file)
‘贰’ Python怎么读写json格式文件
以下示例展示基于Python3.x的json文件的读写:
defjson_basic():
"""json基本操作"""
importjson
data={
"ID":1,
"课程":"Python",
"机构":"优品课堂",
"单价":200.00
}
json_str=json.mps(data)
print(json_str)
json_data=json.loads(json_str)
print(json_data)
defjson_write_file():
"""json操作文件"""
importjson
data={
"ID":1,
"课程":"Python",
"机构":"优品课堂",
"单价":200.00
}
withopen('data.json','w',encoding='utf8')asf:
json.mp(data,f)
‘叁’ Python怎么读写json格式文件
importjson
#read
f=open('x.json','r')
s=f.read()
f.close()
o=json.loads(s)
#write
o['name']='xx'
s=json.mps(o)
f=open('y.json','w')
f.write(s)
f.close()
‘肆’ 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模块提供了四个功能:mps、mp、loads、load
pickle模块提供了四个功能:mps、mp、loads、load
json mps把数据类型转换成字符串 mp把数据类型转换成字符串并存储在文件中 loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型
json是可以在不同语言之间交换数据的,而pickle只在python之间使用。json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。
事例:
mps:将python中的 字典 转换为 字符串
‘伍’ python同时读写多个文件暨大型json文件读取方法
最近处理NLP数据集时,需要一边读json文件,一边向自己创建的txt写入提取出的对话数据集,即同时读写多个文件,本来记得以前在哪看过这波操作的,但时间有点久了,忘了。
又由于新换了mac,win上原有的梯子挂了,这就很离谱,因此也没法谷歌,只能用网络凑合着查了一番,看看有没有大佬记录了这个小tip。但是很遗憾,网上找到的方法都很捞,简直是海底捞,没办法。好在脑子里还有点印象,修修改改总算写出来了,在此做个记录,同时也开源方便一下诸位道友。
你是不是觉得我很捞,很菜,连个文件读写都不会~
那么,对不起,诸位,现在,我要起飞了,你以为你是第二层,我是第一层,实际上,我在第五层,且看我写给你看~
最后,如果有道友对俺的开放域对话数据集感兴趣,这个其实也是开源的
数据集链接
‘陆’ python request/读写/上传文件
python 读写文件:
data_json = json.mps(result_r) #json字符串
f =open('E://XXX.txt',"a+") #打开文件,追加+读写
f.write(data_json) # data_json 写入XXX.txt'文件
f.seek(0) # 光标移动到文件开头
lines = f.read() # 逐行读入
f.close() #关闭文件
mode 打开的方式(r,w,a,x,b,t,r+,w+,a+,U)
r 以只读方式打开文件。文件的指针会放在文件的开头。
w 以写入方式打开文件。文件存在覆盖文件,文件不存在创建一个新文件。
a 以追加方式打开文件。如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。
r+ 打开一个文件用于读写,文件指针会放在文件的开头
w+ 打开一个文件用于读写,文件存在覆盖文件,文件不存在创建一个新文件。
a+ 打开一个文件用于读写,如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。
记忆方法:记住r读,w写,a追加,每个模式后加入+号就变成可读写。
f =open('E://xxx.txt',"a+") / f=open(r'E://xxx.txt',mode='a+',encoding='UTF-8')
踩坑1>
没有加encoding='UTF-8',可能会报如下错:
import requests # 使用 request函数需导入 request 库
import json #使用 JSON 函数需要导入 json 库: import json 。
param ={} #请求body
url ='http://域名/api'
header = {'content-type':'application/json'}
r = requests.post(url,json=param,headers=header) #发送post请求
result_r = r.json() #请求返回的json传入对象result_r
data_json = json.mps(result_r) #将 Python-result_r对象转为字符串 json.mps()
文件上传请求(csv文件)
file_path = "xxx.csv" 文件路径
uploaddata = {"file":open(file_path, "rb")}
file_upload_result = requests.post(api_URL, files=uploaddata, cookies=cookie)
‘柒’ python3 读excel转Json文件
from xlrd import *
import json
# 参考1-字典、列表转JSON:https://www.cnblogs.com/longchang/p/10904850.html
# 参考2-JSON直接保存到文件:https://www.cnblogs.com/miyatest/p/9603897.html
# 从excel读取数据存放到列表中
def readExcel():
keyData=[] # 定义空List,用于保存读到的行数据
excelBook=open_workbook("data.xlsx") # 从当前目录读取《data.xlsx》文件
table=excelBook.sheet_by_name("data") # 从《data.xlsx》中找名为 data的sheet页
rowNum=table.nrows # 获取《data.xlsx》-->data页中 行数
colNum=table.ncols # 获取《data.xlsx》-->data页中 列数
colName=table.row_values(0) # 取第一行数据,即列名,colName 是个List
# print(colName)
if rowNum<=1:
print("没数据...") # 如果行数<=1,说明没有数据,因第1行一般定义为列名
else:
for i in range(rowNum-1):
d={} # 定义空字典,用于存放获取到数据
values=table.row_values(i+1) # 获取每行的数据,values最终是个List
# print(values)
for x in range(colNum): # 每个列作为字典的一组数据
d[colName[x]]=values[x] # 用colName值作为字典的key,values值作业为字典的value
# print(d)
keyData.append(d) # 读完一行数据保存到字典,再保存到列表
# print(keyData)
return keyData # 全部数据读完并保存到列表后,返回
# 列表转Json
def listToJson():
keyParam=readExcel() # 调用从excel读取数据的函数,把数据保存到列表
CaseConfig=open("CaseConfig.json", mode="w+") # 创建json文件
CaseConfig.write('{\n"key":') # 往json文件中写数据,先写json的格式的{,和模块名
# 把从excel读取的数据转成Json格式保存入 CaseConfig,indent=4是进行格式化,使json排版好看
json.mp(keyParam, CaseConfig, indent=4)
CaseConfig.write('\n}') # 往json文件中写数据,写结尾的 },写前先换行
CaseConfig.close() # 关闭json文件,必要!!
if __name__ == '__main__': # 调试调用
listToJson()
‘捌’ python写入json文件
想要多条相同key的数据添加json中,先将数据存入到字典中,再 append 到列表中。最后存入json中。
这样子list才会是下图所示的样子。