世界热资讯!Python实现yaml与json文件批量互转
目录
1. 安装yaml库2. yaml转json3. json转yaml4. 批量将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: Michael
address: Beijing
B:
hello:
name: jack
address: 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__":
jsonPath = "E:/Code/Python/test/test.yaml"
yaml_to_json(jsonPath)
执行结果如下:
{
"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: Michael
address: Beijing
B:
hello:
name: jack
address: Shanghai
注意,如果不加sort_keys=False,那么默认是排序的,则执行结果如下:
A:
hello:
address: Beijing
name: Michael
B:
hello:
address: Shanghai
name: jack
4. 批量将yaml与json文件互相转换
yaml与json文件互相转换:
import yaml
import json
import os
from pathlib import Path
from fnmatch import fnmatchcase
class 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)
# 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 + suffix
newPath = 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,".*"):
pass
else:
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 = "C:/Users/hwx1109527/Desktop/yaml_to_json"
fileName = "os_deploy_config.yaml"
suffix = "yaml"
filePath = dirPath + "/" + fileName
yaml_interconversion_json = Yaml_Interconversion_Json()
yaml_interconversion_json.batch_yaml_to_json(dirPath)
# yaml_interconversion_json.batch_json_to_yaml(dirPath)
# yaml_interconversion_json.batch_remove_file_suffix(dirPath, suffix)
到此这篇关于Python实现yaml与json文件批量互转的文章就介绍到这了,更多相关Python yaml json互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 2充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 3好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 4名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 5亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 6京东绿色建材线上平台上线 新增用户70%来自下沉市场
- 7网红淘品牌“七格格”chuu在北京又开一家店 潮人新宠chuu能红多久
- 8市场竞争加剧,有车企因经营不善出现破产、退网、退市
- 9北京市市场监管局为企业纾困减负保护经济韧性
- 10市场监管总局发布限制商品过度包装标准和第1号修改单

