Python - DIY - 使用dump取json某些键值对合成新的json文件

news2024/11/17 21:34:59

c++

Python - Json处理

  • 前言:
  • 应用场景:
  • 基本工具:
    • 文件操作:
      • 打开文件:
      • 写文件:
      • 读文件:
      • 关闭文件并刷新缓冲区:
    • Json字符串和字典转换:
      • json.loads():
      • json.dumps():
    • Json文件和字典转化:
      • json.load():
      • json.dump():
    • 集成上述API为函数:
    • 自己开发一个json.dump:
  • 扩展:

前言:

Vue框架:从项目学Vue
OJ算法系列:神机百炼 - 算法详解
Linux操作系统:风后奇门 - linux
C++11:通天箓 - C++11

应用场景:

读取一个json文件,利用其中某些键值对来构建一个新的json文件
  • 如获取下列json文件中某几行的键值对,再构建一个json文件
{
	"packs": [{
		"_id": "1",
		"time": 123,
		"category": 0,
		"current_info": {
			"tag": ["timestamp"],
			"fps": 60.0,
			"time_stamp": 414.514,
			"name": "test"
		},
		"content": {
			"core": "service",
			"status": 0,
			"extraction": "client"
		}
	}]
}

基本工具:

文件操作:

打开文件:

  • open(‘文件路径’, ‘打开方式’):
    1. w:覆盖写
    2. r:只读
    3. wb:二进制写
    4. rb:二进制读

写文件:

  • write(字符串):
    字符串中转义字符:
    1. \r:切换到当前行的行首列
    2. \n:切换到下一行的同一列
file = open('Json文件地址', 'w')
lines = ''
for line in file:
	#line自动省略\r\n
    lines += line

读文件:

  • open()返回一个可迭代对象:
file = open('Json文件地址', 'r')
lines = ''
for line in file:
	#line自动省略\r\n
    lines += line

关闭文件并刷新缓冲区:

  • close:
file.close()
  • close()后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法:
file.flush()

Json字符串和字典转换:

json.loads():

  • 用于将 字符串 加载为 字典
file = open('Json文件地址', 'r')
lines = ''
for line in file:
    lines += line
dic = json.loads(lines)
print(dic)

json.dumps():

  • 用于将 字典 写入到 字符串
dic = {'packs': [{'_id': '1', 'time': 123, 'category': 0, 'current_info': {'tag': ['timestamp'], 'fps': 60.0, 'time_stamp': 414.514, 'name': 'test'}, 'content': {'core': 'service', 'status': 0, 'extraction': 'client'}}]}

json_str = json.dumps(dic)

print(json_str)

Json文件和字典转化:

json.load():

  • 用于将文件 加载为 字典
dictionary = json.load(open('原本的Json文件地址', 'r'))
print(dictionary)

json.dump():

  • 用于将字典 写入到 文件,创建文件使用w模式打开
json.dump(ret, open("新的Json文件地址","w"))

集成上述API为函数:

def func(dictionary,*direct_key, **indirect_key):
    ret = {}
    for i in direct_key:
        ret[i] = dictionary[i]
    for i in indirect_key:
        ret[i] = {}
        print(type(ret), type(ret[i]), i)
        for j in indirect_key[i]:
            print(j)
            ret[i][j] = dictionary[i][j]
    return ret

ret = func(json.load('原来的Json文件地址'), '_id', 'end_time', 'frames', ext=['core_cm', 'extraction_cm'], statistics=['parsing_begin', 'parsing_end'])

json.dump(ret, open("新的Json文件地址","w"))

自己开发一个json.dump:

  • 简化版,只能接收json最多二重字典,且最终value为str, int, 或float
import os
import json
def isIntOrFloatSeriously(number):
    result = False
    try:
        n = float(number)
        if str(number).count('.') != 0 or (n.is_integer() and str(number).count('.') == 0):
            result = True
    except:
        result = False
    return result

def func(dictionary,*direct_key, **indirect_key):
    amount = len(direct_key) + len(indirect_key)
    count = 1
    ret = ''
    for i in direct_key:
        ret += f"\"{i}\": "
        if isIntOrFloatSeriously(dictionary[i]) == True :
            ret += str(dictionary[i])
        else:
            ret += "\""+dictionary[i]+"\""
        if count < amount:
            ret += ","
        ret += "\r\n"
        count = count + 1
    for i in indirect_key:
        ret += f"\"{i}\": "+'{\r\n'
        inner_count = 1
        inner_amount = len(indirect_key[i])
        print(inner_amount, indirect_key[i])
        for j in indirect_key[i]:
            ret += f"\"{j}\": "
            if isIntOrFloatSeriously(dictionary[i][j]) == True :
                ret += str(dictionary[i][j])
            else:
                ret += "\""+dictionary[i][j]+"\""
            if inner_count < inner_amount:
                ret += ","
            ret += "\r\n"
            inner_count = inner_count + 1
        ret += "}"
        if count < amount:
            ret += ","
        ret += "\r\n"
        count = count + 1
    return ret

file = open('原本的Json文件地址')
lines = ''
for line in file:
    lines += line
dic = json.loads(lines)

ret = func(dic["packs"][0], '_id', 'end_time', 'frames', ext=['core_cm', 'extraction_cm'], statistics=['parsing_begin', 'parsing_end'])

file = open('新建的Json文件地址', 'w')
file.write('{\r\n')
file.write(ret)
file.write('}\r\n')
file.close()

扩展:

  • Yaml文件格式
  • Yaml文件 转化为 字典
    1. yaml.safe_load():不省略float的.0
    2. yaml.load():省略float的.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高端电器新十年,求解「竞速突围」

竞争激烈的高端电器品牌们&#xff0c;平时王不见王&#xff0c;但也有例外。海尔、博西、海信、创维、方太、老板等等近乎中国电器行业所有一线品牌副总裁级别以上高层&#xff0c;2月22日都现身于上海&#xff0c;来参加一场由红星美凯龙攒起来的高端电器局&#xff0c;2023中…

gogs代码仓库迁移至gitlab仓库上

将gogs仓库的所有分支都迁移到GitLab上 GitHub新建一个空项目 这个我就不教了: 不会的请点击这里 自查本地是否已有SSH公钥 我自身win11举例&#xff1a;C:\Users\PC.ssh\XXXXXX.pub 找“.pub”结尾的文件&#xff0c;用文本打开就是你本地的公钥了 直接复制公钥&#xff0…

比Redis更强,性能直接飙升一倍!

# 什么是KeyDB&#xff1f;KeyDB是Redis的高性能分支&#xff0c;专注于多线程&#xff0c;内存效率和高吞吐量。除了多线程之外&#xff0c;KeyDB还具有仅在Redis Enterprise中可用的功能&#xff0c;例如Active Replication&#xff0c;FLASH存储支持以及一些根本不可用的功能…

Java异常Throwable的分类

1. Exception&#xff1a;程序本身可以捕获并且可以处理的异常 编译时异常&#xff1a;编译期就会检查的异常&#xff0c;若调用的方法中throw了此类异常&#xff0c;则必须进行显式处理处理&#xff08;用try…catch捕获或者throws向上抛出&#xff09;&#xff0c;否则无法通…

react源码解析10.commit阶段

在render阶段的末尾会调用commitRoot(root);进入commit阶段&#xff0c;这里的root指的就是fiberRoot&#xff0c;然后会遍历render阶段生成的effectList&#xff0c;effectList上的Fiber节点保存着对应的props变化。之后会遍历effectList进行对应的dom操作和生命周期、hooks回…

Materials - DistanceField Nodes

以前的相关笔记&#xff0c;归档发布&#xff1b;距离场相关节点&#xff1a;DistanceToNearestSurface节点&#xff1a;求出传入的Position位置到最近的面的距离并输出&#xff0c;在没有Position输入的时候&#xff0c;默认值会直接使用World Position&#xff1a;Position的…

部门来了个测试工程师,听说是00后,实在是太卷了.....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们部门来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。…

喜讯!华秋电子荣获第六届“蓝点奖”十佳分销商奖

2 月 25 日&#xff0c;由深圳市电子商会主办的2023 中国电子信息产业创新发展交流大会暨第六届蓝点奖颁奖盛典在深圳隆重举行。 图&#xff1a;华秋商城渠道总监杨阳&#xff08;右三&#xff09; 深圳市电子商会连续六年举办“蓝点奖”评选活动&#xff0c;旨在表彰对电子信…

公众号运营思路是怎样的?建议收藏

问大家一个直击灵魂的问题&#xff1a; 你真的知道你的公众号该怎么运营吗&#xff1f; 先不要草率回答我&#xff0c;你先说说你的公众号运营思路是怎样的&#xff1f; 如果你连基本的运营思路都讲不出来&#xff0c;可想而知&#xff0c;你的公众号运营也好不到哪里去。 …

3.一一对应—简单工厂模式

什么是简单工厂模式&#xff1f; 简单工厂模式&#xff08;Simple Factory&#xff09;&#xff0c;解决的是在多个基类的继承类中如何选择对应的类实例化。 到底要实例化哪一个继承类&#xff1f;——这就是简单工厂模式整天思考的问题。而之所以会出现这个问题是由于软件架…

java虚拟机中对象创建过程

java虚拟机中对象创建过程 我们平常创建一个对象&#xff0c;仅仅只是使用new关键字new一个对象&#xff0c;这样一个对象就被创建了&#xff0c;但是在我们使用new关键字创建对象的时候&#xff0c;在java虚拟机中一个对象是如何从无到有被创建的呢&#xff0c;我们接下来就来…

强化学习RL 02: Value-based Reinforcement Learning

DQN和TD更新算法。 目录 Review 1. Deep Q-Network(DQN) 1.1 Approximate the Q*(s,a) Function 1.2 Apply DQN to Play Game 1.3 Temporal Difference(TD) Learning 1.4 TD Learning for DQN 1.4.1 TD使用条件 condition 1.4.2 Train DQN using TD learning 1.5 summ…

【项目精选】基于java出租车计价器设计与实现(源码+论文+视频)

关于java出租车计价器设计与实现 点击下载源码 总共4个模块 &#xff08;1&#xff09;出租车计价系统可以实现出租车信息的管理。 1.1出租车信息的查询&#xff1a;通过数据库查询出租车的车型&#xff0c;车号&#xff0c;以及是否可用 1.2出租车信息的增加&#xff1a;向数据…

如何将BI 工具与业务系统进行单点登录对接,实现用户权限通用

首先来看下两套系统的用户体系功能&#xff0c;左边是BI 工具&#xff0c;右边是业务系统&#xff0c;需要实现用户权限对接和打通&#xff1a; 单点登录体系及用户场景 • 场景1. 用户登录Wyn BI页面使用第三方业务系统账号 • 场景2. 用户使用第三方账号登录wyn BI以后需要获…

栈与队列小结

一、理论基础1.队列是先进先出&#xff0c;栈是先进后出2.栈和队列是STL&#xff08;C标准库&#xff09;里面的两个数据结构。栈提供push和pop等等接口&#xff0c;所有元素必须符合先进后出规则&#xff0c;所以栈不提供走访功能&#xff0c;也不提供迭代器。3.栈是以底层容器…

求职陷阱:Lazarus组织以日本瑞穗銀行等招聘信息为诱饵的攻击活动分析

概述 Lazarus组织是疑似具有东北亚背景的APT组织&#xff0c;奇安信威胁情报中心内部追踪编号为APT-Q-1&#xff0c;因2014年攻击索尼影业开始受到广泛关注&#xff0c;其攻击活动最早可追溯到2007年。该组织早期主要针对其他国家政府机构&#xff0c;以窃取敏感情报为目的&am…

Java查漏补缺(15)java.io.File类的使用、IO流原理及流的分类、节点流、处理流、其他流的使用、apache-common包的使用

Java查漏补缺&#xff08;15&#xff09;java.io.File类的使用、IO流原理及流的分类、节点流、处理流、其他流的使用、apache-common包的使用本章专题与脉络1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命…

CLion Remote Debug CrossCompile

CLion远程Docker调试ROS(交叉编译)的设置步骤 准备一个好用的docker&#xff0c;运行起来&#xff08;Docker Image一定可以跑cuda和图形界面的&#xff0c;否则启动不了CLion&#xff0c;可以不用浪费时间看本教程了&#xff09; 在docker镜像中配置好ssh和rsync&#xff0c;…

数据可视化第二版-03部分-06章-比较与排序

文章目录数据可视化第二版-03部分-06章-比较与排序总结可视化视角-比较与排序代码实现创建虚拟环境1. python版本管理2.切换到指定版本后安装虚拟环境切换路径到文件当前路径柱形图环形柱状图子弹图哑铃图雷达图词云图教材截图数据可视化第二版-03部分-06章-比较与排序 总结 …

18- TensorFlow模型中Keras进阶 (TensorFlow系列) (深度学习)

知识要点 导入数据: (x_train, y_train), (x_test, y_test) mnist.load_data()标准化处理: x_train_scaled scaler.fit_transform(x_train) # scaler StandardScaler()one-hot编码: y_train tf.keras.utils.to_categorical(y_train, 10) 定义神经网络: model t…