文章目录

  • 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的文件

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

  1. 在线Excel文件解析转换成JSON格式

    在线Excel文件解析转换成JSON格式 在线Excel文件解析转换成JSON格式 本工具可以将上传的Excel文件解析转换成JSON格式,支持下载 本工具可以将上传的Excel文件解析转换成JSON ...

  2. python response.json()报错_python:解析requests返回的response(json格式)说明

    我就废话不多说了,大家还是直接看代码吧! import requests, json r = requests.get('http://192.168.207.160:9000/api/quality ...

  3. python内置json模块_python的常用内置模块之序列化模块json

    #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. '''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文 ...

  4. Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地

    Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地 目录

  5. 【Python】 python读取Json文件

    解析Json的常见代码 import json # 导入json解析需要的包 1. json.loads()读取字符串到json object json.loads()是将str\bytes\byte ...

  6. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  7. Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

    原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你学习了如何从 PDF 和 Word 文档中提取文本.这些文件是二进制格式的,需 ...

  8. python读取json数据的key值_jquery中怎么获取json的key值?

    展开全部 获取方法如下:用jquery回调函数完成. $.each(json, function(i) {    console.log(i); //获取键值 console.log(json[i]) ...

  9. 2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式

    都说程序员最拿手的好戏是复制粘贴,对于这件事我也是深以为然,遇到问题先看看别人,有么有写好的,没有写好的看看类似的,实在不行继续百度群里问问,最后再自己操刀上吧,microPython作为小众的控制器 ...

最新文章

  1. 统计学原理-----概率分布
  2. 验证ArrayList插入同样数据使用指定容量和默认容量的效率
  3. 京东到家基于netty与websocket的实践
  4. Java 集合框架(List、Set、Map、Iterator、Stack、Properties)
  5. python获取pc微信好友列表_python使用itchat获取微信好友列表
  6. 【Elasticsearch】Elasticsearch 相关度评分 TFIDF
  7. DLL的Export和Import及extern
  8. linux离线安装docx包
  9. 项目过程管理(十七)结项
  10. 小白进阶之影片TS版,TC版,CAM版,HD版,BD版,DVD,HDVD等版本介绍
  11. 2021年12月中国各省市认证证书数量排行榜:Top前四的省份证书数累计占全国比重超过50%(附月榜TOP34详单)
  12. 同步软件Activesync4.5遇到的一些棘手问题
  13. ESP32-8位数码管
  14. 手机验证码登录,账号登录结合
  15. 新手怎么写电影解说文案?
  16. 计算机程序必须在有限的步骤内完成,苏教版必修三 §1.1 算法的含义 学案.docx...
  17. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代!
  18. php邮箱必填,ZBlogPHP-1.5 以上版本修改实现用户评论时必填邮箱的功能
  19. 获取笑话集网站笑话数据的后台代码
  20. 英国AI研究员揭开真相,中国人工智能为何能发展迅猛?

热门文章

  1. Linux彻底卸载Nginx
  2. Java设计模式-迪米特法则
  3. RTOS任务调度思想汇总
  4. 2019年pubg服务器维护,2019年5月22日绝地求生今天更新维护到几结束?
  5. socks4代理网络渗透测试实验
  6. HTML5+CSS3+JQuery小实例:简单又令人惊艳的hover效果登录界面
  7. Flink - Java篇
  8. 首创ToB非成勿扰,2018生态大会让软件商与渠道商惊艳对接
  9. 基于xilinx zynq7000平台(zynq7030),使用 github上的axi_dma驱动操作dma(PL与PS通信)
  10. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset...