当前位置: 首页 > news >正文

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

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\nlines += line

读文件:

  • open()返回一个可迭代对象:
file = open('Json文件地址', 'r')
lines = ''
for line in file:#line自动省略\r\nlines += 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 retret = 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 = Falsetry:n = float(number)if str(number).count('.') != 0 or (n.is_integer() and str(number).count('.') == 0):result = Trueexcept:result = Falsereturn resultdef func(dictionary,*direct_key, **indirect_key):amount = len(direct_key) + len(indirect_key)count = 1ret = ''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 + 1for i in indirect_key:ret += f"\"{i}\": "+'{\r\n'inner_count = 1inner_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 + 1ret += "}"if count < amount:ret += ","ret += "\r\n"count = count + 1return retfile = 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

相关文章:

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

Python - Json处理前言&#xff1a;应用场景&#xff1a;基本工具&#xff1a;文件操作&#xff1a;打开文件&#xff1a;写文件&#xff1a;读文件&#xff1a;关闭文件并刷新缓冲区&#xff1a;Json字符串和字典转换&#xff1a;json.loads()&#xff1a;json.dumps():Json文…...

深度剖析指针(中)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容仍旧是深度剖析指针噢&#xff0c;在上一篇博客中&#xff0c;我已经写过了字符指针、数组指针、指针数组、数组传参和指针传参的知识点&#xff0c;那么这篇博客小雅兰会讲解一下函数指针、函数指针数组 、指向函数指针数组…...

论文阅读 | Video Frame Synthesis using Deep Voxel Flow

前言&#xff1a; 视频帧生成方法&#xff08;视频插帧/视频预测&#xff09;ICCV2017 oral Video Frame Synthesis using Deep Voxel Flow 引言 当下进行视频帧合成的方法分为两种&#xff0c;第一种是光流法&#xff0c;光流准确的话效果好&#xff0c;光流不准确的话则生…...

我所理解的生活

诞生 人真正意义上的诞生应该是社会学意义上的&#xff0c;是一种意识到自我、自我与社会关系的存在&#xff0c;只有这种诞生&#xff0c;才是完整人生的基点&#xff0c;大千世界中&#xff0c;唯有人类以生活作为自己的存在方式&#xff0c;除人类以外&#xff0c;从无机界…...

debian 部署nginx https

我是flask 处理请求单进程&#xff0c; 差点意思 &#xff0c; 考虑先flask 在往下走 一&#xff1a;安装nginx 因为我是debian 系统&#xff0c;所以我的建议是直接 sudo apt-get install nginx 你也可以选择在官网下载&#xff0c; 但是我搭建ssl 的时候安装openssl非常的麻…...

SQL 层功能改进 - lookupJoin 的优化

一、传统 join 算法lookupJoin 是 join 查询的一种&#xff0c;传统 join 算法为&#xff1a;1. 遍历 A 表&#xff0c;读取一条数据 r2. 遍历 B 表&#xff0c;对于每条数据&#xff0c;与 r 进行 join 操作3. 重复 1、2 操作&#xff0c;直到 A 表遍历完所有数据二、lookupJo…...

动态规划:鸣人的影分身

在火影忍者的世界里&#xff0c;令敌人捉摸不透是非常关键的。我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例子。影分身是由鸣人身体的查克拉能量制造的&#xff0c;使用的查克拉越多&#xff0c;制造出的影分身越强。针对不同的作战情况&#xf…...

如何为三星active2手表安装自己DIY的表盘

一、步骤介绍 Step 1. 下载Galaxy watch studio&#xff1b; Step 2. 按照up主“隔壁张师傅2022”的文章进行安装。 二、安装流程简单说明&#xff1a; ① 电脑端官网下载并安装Galaxy Watch Designer或者Galaxy Watch Studio程序。 ② 关闭手表蓝牙连接&#xff0c;并打开调…...

Android 项目必备(四十二)-->Android 多窗口模式

简介 自由窗口模式: 该模式类似于常见的桌面操作系统&#xff0c; 应用界面的窗口可以自由的拖动和修改大小。 分屏模式 该模式可以在手机上使用&#xff0c; 该模式将屏幕一分为二&#xff0c; 同时显示两个应用界面。 画中画模式: 该模式主要用于TV&#xff0c; 在该模式下…...

OpenHarmony的未来和如何做好一个开源社区

今天要分享的文章&#xff0c;可能更多只是作为一种观点。主要包括2个内容。OpenHarmony的未来和如何做好一个开源社区&#xff0c;好的&#xff0c;接下来开始今天的内容。 你对OpenHarmony的未来如何看待&#xff1f; OpenHarmony的未来看起来非常光明&#xff0c;因为它具…...

二叉搜索树实现

树的导览 树由节点&#xff08;nodes&#xff09;和边&#xff08;edges&#xff09;构成&#xff0c;如下图所示。整棵树有一个最上端节点&#xff0c;称为根节点&#xff08;root&#xff09;。每个节点可以拥有具有方向的边&#xff08;directed edges&#xff09;&#xf…...

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题&#xff0c;首先我是通过maven创建了一个spring boot的工程&#xff0c;引入了Spring data jpa&#xff0c;结果实体类创建好之后&#xff0c;运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…...

Elasticsearch:创建一个简单的 “你的意思是?” 推荐搜索

“你的意思是” 是搜索引擎中一个非常重要的功能&#xff0c;因为它们通过显示建议的术语来帮助用户&#xff0c;以便他可以进行更准确的搜索。比如&#xff0c;在百度中&#xff0c;我们进行搜索时&#xff0c;它通常会显示一些更为常用推荐的搜索选项来供我们选择&#xff1a…...

urllib之ProxyHandler代理以及CookieJar的cookie内存传递和本地保存与读取的使用详解

处理更高级操作时(Cookies处理&#xff0c;代理设置)&#xff0c;需要一个强大的工具Handler&#xff0c;可以理解成各种处理器&#xff0c;有处理登录认证的、有处理Cookies的、有处理代理设置的。利用这些几乎可以做到HTTP请求中所有事情。当中urllib.request模块里的 BaseHa…...

华为造车锚定智选模式, 起点赢家赛力斯驶入新能源主航道

文|螳螂观察 作者| 易不二 近日&#xff0c;赛力斯与华为的一纸联合业务深化合作协议&#xff0c;给了频频猜测赛力斯与华为之间关系的舆论一个明确的定调&#xff1a;智选模式已成为华为与赛力斯共同推动中国新能源汽车产业高质量发展的坚定选择。 自华为智能汽车业务开启零…...

[oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏

游戏娱乐行业 回忆上次内容 游戏机行业从无到有 雅达利 公司 一枝独秀并且带领 行业 发展起来 雅达利公司 优秀员工 乔布斯 在 朋友 帮助下完成了《pong》 Jobs 黑了 Woz 一部分收入 然后拿着钱 去印度禅修了 游戏行业 会如何继续 呢&#xff1f;?&#x1f914; 灵修 乔布…...

使用python测试框架完成自动化测试并生成报告-实例练习

练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 1、写个简单的计算器功能&#xff0c;大小写转换功能&#xff0c;随机生成字符串功能 2、编写测试用例&#xff0c;不同的数据&#xff08;你能想到的所有测试用例&#xff09;&#xff0c;并进行断言。除0的…...

JavaWeb 实战 01 - 计算机是如何工作的

计算机是如何工作的1. 计算机发展史2. 计算机的基本组成2.1 冯诺依曼体系结构2.2 CPU的内部结构2.3 指令2.3.1 指令表2.3.1.1 寄存器2.3.2 CPU的工作流程2.4 小结3. 操作系统3.1 核心功能3.2 操作系统的软硬件结构3.3 什么是进程 / 任务3.4 进程管理3.4.1 管理3.4.2 PCB : 进程…...

线性代数学习-1

线性代数学习-1行图像和列图像行图像列图像总结本文转载于https://herosunly.blog.csdn.net/article/details/88698381 该文章本人认为十分有用&#xff0c;便自己敲一遍笔记加固印象原文链接 原文这个笔记感觉比我老师讲的更加透彻&#xff0c;清晰。很好的展示了线性代数的原…...

人工智能写的十段代码,九个通过测试了

“抢走你工作的不会是 AI &#xff0c;而是先掌握 AI 能力的人” 编程测试 1. 我想用golang实现二叉树前序&#xff0c;请你帮我写一下代码。 // 定义二叉树节点 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }// 前序遍历 func PreOrderTraversal(root *Tre…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...