【发布时间】:2021-05-07 17:22:47
【问题描述】:
我正在尝试将 yaml 转换为 json。 但是,在转换之前,我需要检查传入的文件是否为 yaml(此检查是强制性的)
我在Is there a way to determine whether a file is in YAML or JSON format? 找到了一些代码,并在下面找到:
import re
from pathlib import Path
commas = re.compile(r',(?=(?![\"]*[\s\w\?\.\"\!\-\_]*,))(?=(?![^\[]*\]))')
"""
Find all commas which are standalone
- not between quotes - comments, answers
- not between brackets - lists
"""
file_path = Path("example_file.cfg")
signs = commas.findall(file_path.open('r').read())
return "json" if len(signs) > 0 else "yaml"
但我的输入文件不像:
example_file.cfg
我的输入是example.yaml 或example.json
所以我需要没有example_file.cfg的比较
如果有任何帮助,我们将不胜感激。
【问题讨论】:
-
为什么不检查输入的文件扩展名?
-
如果文件扩展名在您的情况下不可靠,那么您链接的问题的可接受答案就是我会做的:尝试将其解析为 JSON 和 YAML,并捕获异常。
-
如果您可以使用扩展程序,为什么要尝试检测任何东西?此外,这个正则表达式过于复杂。 JSON 文档只能以
[或{开头。您需要做的就是检查第一个非空格字符是[还是{。您需要做的就是从文件中读取第一个非空格字符。你甚至不需要阅读整个文本 -
每个有效的 JSON 文件也是有效的 YAML 1.2 文件[1],为什么不直接将文件加载为 YAML 并输出为 JSON?
-
@Jasmijn 感谢您的建议,但我们无法将每个文件都加载为 yaml 文件。因为我们需要将两个文件选项都提供给客户 YAML 或 JSON,但是如果客户提供 YAML 文件,那么我们需要在内部将其转换为 json 并继续进行!这就是为什么我们需要在继续之前进行一次检查。检查应包含检查传入文件是否为 YAML 的代码,如果是,则先将其转换为 json 并继续进行