【Python】使用python实现yaml转json,json转yaml,以及批量实现yaml与json文件互相转换

article/2025/6/18 21:33:48

文章目录

  • 1. 安装yaml库
  • 2. yaml转json
  • 3. json转yaml
  • 4. 批量将yaml与json文件互相转换

1. 安装yaml库

想要使用python实现yaml与json格式互相转换,需要先下载pip,再通过pip安装yaml库。
如何下载以及使用pip,可参考我的另一篇博客:pip的安装与使用,解决pip下载速度慢的问题

安装yaml库:

pip install pyyaml

2. yaml转json

新建一个test.yaml文件,添加以下内容:

A:hello:name: Michaeladdress: Beijing
B:hello:name: jackaddress: Shanghai         

代码如下:

import yaml
import json# yaml文件内容转换成json格式
def yaml_to_json(yamlPath):with open(yamlPath, encoding="utf-8") as f:datas = yaml.load(f,Loader=yaml.FullLoader)  # 将文件的内容转换为字典形式jsonDatas = json.dumps(datas, indent=5) # 将字典的内容转换为json格式的字符串print(jsonDatas)if __name__ == "__main__":yamlPath = 'E:/Code/Python/test/test.yaml'yaml_to_json(yamlPath)

执行结果如下:

{"A": {"hello": {"name": "Michael",   "address": "Beijing" }},"B": {"hello": {"name": "jack",      "address": "Shanghai"}}
}

3. json转yaml

新建一个test.json文件,添加以下内容:

{"A": {"hello": {"name": "Michael","address": "Beijing"           }},"B": {"hello": {"name": "jack","address": "Shanghai"    }}
}

代码如下:

import yaml
import json# json文件内容转换成yaml格式
def json_to_yaml(jsonPath):with open(jsonPath, encoding="utf-8") as f:datas = json.load(f) # 将文件的内容转换为字典形式yamlDatas = yaml.dump(datas, indent=5, sort_keys=False) # 将字典的内容转换为yaml格式的字符串print(yamlDatas)if __name__ == "__main__":jsonPath = 'E:/Code/Python/test/test.json'json_to_yaml(jsonPath)

执行结果如下:

A:hello:name: Michaeladdress: Beijing
B:hello:name: jackaddress: Shanghai

注意,如果不加sort_keys=False,那么默认是排序的,则执行结果如下:

A:hello:address: Beijingname: Michael
B:hello:address: Shanghainame: jack

4. 批量将yaml与json文件互相转换

一、定义了一个Yaml_Interconversion_Json类,实现批量将yaml与json文件互相转换,代码如下:

import yaml
import json
import os
from pathlib import Path
from fnmatch import fnmatchcaseclass Yaml_Interconversion_Json:def __init__(self):self.filePathList = []# yaml文件内容转换成json格式def yaml_to_json(self, yamlPath):with open(yamlPath, encoding="utf-8") as f:datas = yaml.load(f,Loader=yaml.FullLoader)  jsonDatas = json.dumps(datas, indent=5)# print(jsonDatas)return jsonDatas# json文件内容转换成yaml格式def json_to_yaml(self, jsonPath):with open(jsonPath, encoding="utf-8") as f:datas = json.load(f)yamlDatas = yaml.dump(datas, indent=5, sort_keys=False)# print(yamlDatas)return yamlDatas# 生成文件def generate_file(self, filePath, datas):if os.path.exists(filePath):os.remove(filePath)	with open(filePath,'w') as f:f.write(datas)# 清空列表def clear_list(self):self.filePathList.clear()# 修改文件后缀def modify_file_suffix(self, filePath, suffix):dirPath = os.path.dirname(filePath)fileName = Path(filePath).stem + suffixnewPath = dirPath + '/' + fileName# print('{}_path:{}'.format(suffix, newPath))return newPath# 原yaml文件同级目录下,生成json文件def generate_json_file(self, yamlPath, suffix ='.json'):jsonDatas = self.yaml_to_json(yamlPath)jsonPath = self.modify_file_suffix(yamlPath, suffix)# print('jsonPath:{}'.format(jsonPath))self.generate_file(jsonPath, jsonDatas)# 原json文件同级目录下,生成yaml文件def generate_yaml_file(self, jsonPath, suffix ='.yaml'):yamlDatas = self.json_to_yaml(jsonPath)yamlPath = self.modify_file_suffix(jsonPath, suffix)# print('yamlPath:{}'.format(yamlPath))self.generate_file(yamlPath, yamlDatas)# 查找指定文件夹下所有相同名称的文件def search_file(self, dirPath, fileName):dirs = os.listdir(dirPath) for currentFile in dirs: absPath = dirPath + '/' + currentFile if os.path.isdir(absPath): self.search_file(absPath, fileName)elif currentFile == fileName:self.filePathList.append(absPath)# 查找指定文件夹下所有相同后缀名的文件def search_file_suffix(self, dirPath, suffix):dirs = os.listdir(dirPath) for currentFile in dirs: absPath = dirPath + '/' + currentFile if os.path.isdir(absPath):if fnmatchcase(currentFile,'.*'): passelse:self.search_file_suffix(absPath, suffix)elif currentFile.split('.')[-1] == suffix: self.filePathList.append(absPath)# 批量删除指定文件夹下所有相同名称的文件def batch_remove_file(self, dirPath, fileName):self.search_file(dirPath, fileName)print('The following files are deleted:{}'.format(self.filePathList))for filePath in self.filePathList:if os.path.exists(filePath):os.remove(filePath)	self.clear_list()# 批量删除指定文件夹下所有相同后缀名的文件def batch_remove_file_suffix(self, dirPath, suffix):self.search_file_suffix(dirPath, suffix)print('The following files are deleted:{}'.format(self.filePathList))for filePath in self.filePathList:if os.path.exists(filePath):os.remove(filePath)	self.clear_list()# 批量将目录下的yaml文件转换成json文件def batch_yaml_to_json(self, dirPath):self.search_file_suffix(dirPath, 'yaml')print('The converted yaml file is as follows:{}'.format(self.filePathList))for yamPath in self.filePathList:try:self.generate_json_file(yamPath)except Exception as e:print('YAML parsing error:{}'.format(e))         self.clear_list()# 批量将目录下的json文件转换成yaml文件def batch_json_to_yaml(self, dirPath):self.search_file_suffix(dirPath, 'json')print('The converted json file is as follows:{}'.format(self.filePathList))for jsonPath in self.filePathList:try:self.generate_yaml_file(jsonPath)except Exception as e:print('JSON parsing error:{}'.format(jsonPath))print(e)self.clear_list()if __name__ == "__main__":dirPath = 'E:/Code/Python/test'yaml_interconversion_json = Yaml_Interconversion_Json()yaml_interconversion_json.batch_yaml_to_json(dirPath)

二、Yaml_Interconversion_Json类中函数的介绍:

  • yaml_to_json():把yaml文件内容转换成json格式,并返回json格式数据
  • json_to_yaml():把json文件内容转换成yaml格式,并返回yaml格式数据
  • generate_json_file():原yaml文件同级目录下,生成json文件
  • generate_yaml_file():原json文件同级目录下,生成yaml文件
  • batch_yaml_to_json():批量将目录下的yaml文件转换成json文件
  • batch_json_to_yaml():批量将目录下的json文件转换成yaml文件
  • batch_remove_file(): 批量删除指定文件夹下所有相同名称的文件
  • batch_remove_file_suffix():批量删除指定文件夹下所有相同后缀名的文件

三、函数用法如下:

准备工作:E:/Code/Python/test目录下,准备以下文件及文件夹

  • a文件夹:
    • a.yaml
    • test.yaml
  • exception.yaml:异常格式的yaml文件
  • test.yaml

在这里插入图片描述

在这里插入图片描述
a.yamltest.yaml的内容同上,exception.yaml的内容如下:

A:helloaddress: Beijingname: Michael
B:hello:address: Shanghainame: jack

示例一:传入yaml文件路径,在同级目录下生成json文件

代码:

filePath = 'E:/Code/Python/test/test.yaml'
yaml_interconversion_json = Yaml_Interconversion_Json()
yaml_interconversion_json.generate_json_file(filePath)

执行结果如下:
在这里插入图片描述

运行结果:
1.在test.yaml的同级目录下,生成test.json

示例二:传入文件夹路径,批量将该文件夹下的yaml文件转换成json文件

代码:

dirPath = 'E:/Code/Python/test'
yaml_interconversion_json = Yaml_Interconversion_Json()
yaml_interconversion_json.batch_yaml_to_json(dirPath)

执行结果如下:

The converted yaml file is as follows:['E:/Code/Python/test/a/a.yaml', 'E:/Code/Python/test/a/test.yaml', 'E:/Code/Python/test/exception.yaml', 'E:/Code/Python/test/test.yaml']
YAML parsing error:mapping values are not allowed herein "E:/Code/Python/test/exception.yaml", line 3, column 18

在这里插入图片描述

运行结果:
1.打印了批量转换文件的路径信息
2.打印了异常文件的信息
3.除了异常的exception.yaml文件未能成功转换并生成json文件,其余的yaml文件都生成了对应的json文件

示例三:传入文件夹路径,批量删除指定文件夹下所有相同名称的文件

代码:

dirPath = 'E:/Code/Python/test'
fileName = 'test.yaml'
yaml_interconversion_json = Yaml_Interconversion_Json()
yaml_interconversion_json.batch_remove_file(dirPath, fileName)

执行结果如下:

The following files are deleted:['E:/Code/Python/test/a/test.yaml', 'E:/Code/Python/test/test.yaml']

在这里插入图片描述

运行结果:
1.打印了批量删除文件的路径信息
2.删除了test文件夹下所有test.yaml文件

示例四:传入文件夹路径,批量删除指定文件夹下所有相同后缀名的文件

代码:

dirPath = 'E:/Code/Python/test'
suffix = 'yaml'
yaml_interconversion_json = Yaml_Interconversion_Json()
yaml_interconversion_json.batch_remove_file_suffix(dirPath, suffix)

执行结果如下:

The following files are deleted:['E:/Code/Python/test/a/a.yaml', 'E:/Code/Python/test/a/test.yaml', 'E:/Code/Python/test/exception.yaml', 'E:/Code/Python/test/test.yaml']

在这里插入图片描述

运行结果:
1.打印了批量删除文件的路径信息
2.删除了test文件夹下所有后缀名是.yaml的文件


http://chatgpt.dhexx.cn/article/oNsacCTD.shtml

相关文章

转JSON数据的基本使用

目录 一、JSON概念 二、常用类型 三、基本使用 四、JsonIgnore&JsonIgnoreProperties() 五、 解决JSON日期格式化问题:JsonFormat 一、JSON概念 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 EC…

docker重启rabbitmq

1.输入docker ps -a 看看有哪些docker 镜像在运行2.先停止输入再进行删除3.然后我们发现已经没有了,再重新运行 docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v pwd/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOSTvho…

为什么我的 postgresql 重启 docker 后数据库就没了?

我们可以使用 docker 直接加载 postgresql 镜像来启动一个新的 postgresql 服务,但是这样做当重启 postgresql 的容器后,我们会发现数据库的内容就没了。 这个时候我们需要使用 docker volume 功能让 postgresql 把数据库放到主机 (host) 的文件夹下来保…

LINUX配置防火墙端口。并防火墙修改之后重启docker

一:linux配置防火墙 通过修改/etc/sysconfig/iptables文件的方式开启端口,如下 二:修改防火墙端口 然后在文件中增加一行。 三:重启防火墙,修改生效 service iptables restart 四:查看防火墙是否开启 ls…

为什么防火墙重启docker容器连接不上网络?

记录一次docker网络连接的问题: docker 容器化技术 linux 主机防火墙重启了之后为啥docker 就不能正常连接网络了,需要重启docker服务; 系统版本:redhat 7.5 docker版本:19.03.13 说起这个问题,就不得不说docker的网络…

Ubuntu18重启docker服务失败问题备忘

环境信息 操作系统:Ubuntu 18.04.2Docker:18.06.1-ce 现象 执行命令service restart docker,提示启动失败: roothedy:~# systemctl restart docker Failed to restart docker.service: Unit docker.service not found.原因 依…

重启docker容器命令

先查看docker容器 docker ps -a 然后用docker attach 命令进入启动的docker

Docker修改daemon.json配置,不需要重启docker或daemon-reload

dockerd reload 配置(不会重启 dockerd,直接修改配置) kill -SIGHUP $(pidof dockerd) # 给 dockerd 发送 SIGHUP 信号,dockerd 收到信号后会 reload 配置查看是否配置成功 docker info | grep -i 配置过滤关键字

不重启docker进程,重新reload加载配置

因为运行了多个容器,重启docker进程时会让所有容器重启,时间不能等;有没有类似nginx一样的reload机制呢? linux 信号认知:SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知…

linux定时任务 定时重启docker容器

Linux添加crontab定时任务 由于公司古董项目,不知原因引发了,容器得每次重启才能正常使用。由于工作进度的原因没办法对老项目进行构架重构。就采取了这个定时任务的方式解决办法。 首先根据网页提供资料,crontab分为两类,系统c…

服务器关机后,重启docker容器

可以先查看被关闭的容器 使用命令 docker container ls -a 然后找到容器,输入 docker container start xxxx(容器名称) 就可以启动容器了 此外,设置开机自启 docker update --restartalways xxxx(容器名称)

docker启动,重启,关闭命令

启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker stop 关闭docker systemctl stop dockerDocker容器的创建、启动、和停…

Git快速入门-常用命令之交响乐篇

Git快速入门系列文章 - Git快速入门-安装配置篇 - Git快速入门-常用命令之独奏篇 - Git快速入门-常用命令之交响乐篇 - Git快速入门-git stash 暂存变更,git reset 撤销commit,git revert 回退远程版本库 1.概述 Git入门系列第三篇,介绍…

开发linux常用指令操作

1. 开发linux常用指令操作 1.文档操作常用指令 命令功能描述ls列出目录cd切换目录pwd显示目前的目录mkdir创建一个新的目录rmdir删除一个空的目录cp复制文件或目录rm移除文件或目录mv移动文件与目录或修改文件与目录的名称 自动补全 在敲出 文件/ 目录 / 命令 的前几个字母…

Git使用教程总和

Git使用教程 【一】下载安装(Windows) 【1】获取Git安装程序 Git官网地址:https://git-scm.com/downloads 因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的最新版本(如…

一本面向入门者的Git书

一本面向开发者的Git书《Git学习指南》 如果你在某一团队中从事开发工作,希望了解如何才能有效地使用Git,那么这本书就是一个正确的选择。本书既不是那种偏重于理论的大部头,也不是一本面面俱到的参考书。我们并不打算解释所有的Git命令&…

Git基础操作

文章参考了廖雪峰的Git教程,自己进行了具体的操作学习,实例演示,加以记录学习。 目录 Git简介 Git与GitHub 安装Git 创建版本库 把文件添加到版本库 基本文件操作 修改 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 远程…

项目开发-工具-版本控制Git完整系统化使用说明

Git使用说明 前言1. 起步1.1 关于版本控制1.2 Git 简史1.3 Git 是什么?1.4 命令行1.5 安装 Git1.6 初次运行 Git 前的配置1.7 获取帮助1.8 总结 2. Git 基础2.1 获取 Git 仓库2.2 记录每次更新到仓库2.3 查看提交历史2.4 撤消操作2.5 远程仓库的使用2.6 打标签2.7 G…

三十分钟轻松玩转Git——学会Git就靠这一篇(ง •_•)ง

文章目录 Git入门教程Git简介🙋‍♀️Git是什么?🙋‍♀️GitHub与码云?🙋‍♀️TortoiseGit是什么?🙋‍♀️图形化客户端? 安装Git初始化Git📍1.配置用户信息&#x1f4c…

【推荐】git commit 规范和如何在 commit 里使用 emoji

前言 大家好,我是桃翁,今天给大家带来的是关于 git commit 那些事儿,希望大家喜欢。 对于规范 git commit message 我是分成了两种类型去看待。 对于通用库、开源项目这类多人维护,而且极大可能别人会来看这份代码的&#xff0c…