【问题标题】:Determine if a file is either YAML or JSON format确定文件是 YAML 还是 JSON 格式
【发布时间】: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.yamlexample.json

所以我需要没有example_file.cfg的比较

如果有任何帮助,我们将不胜感激。

【问题讨论】:

  • 为什么不检查输入的文件扩展名?
  • 如果文件扩展名在您的情况下不可靠,那么您链接的问题的可接受答案就是我会做的:尝试将其解析为 JSON 和 YAML,并捕获异常。
  • 如果您可以使用扩展程序,为什么要尝试检测任何东西?此外,这个正则表达式过于复杂。 JSON 文档只能以[{ 开头。您需要做的就是检查第一个非空格字符是[ 还是{。您需要做的就是从文件中读取第一个非空格字符。你甚至不需要阅读整个文本
  • 每个有效的 JSON 文件也是有效的 YAML 1.2 文件[1],为什么不直接将文件加载为 YAML 并输出为 JSON?
  • @Jasmijn 感谢您的建议,但我们无法将每个文件都加载为 yaml 文件。因为我们需要将两个文件选项都提供给客户 YAML 或 JSON,但是如果客户提供 YAML 文件,那么我们需要在内部将其转换为 json 并继续进行!这就是为什么我们需要在继续之前进行一次检查。检查应包含检查传入文件是否为 YAML 的代码,如果是,则先将其转换为 json 并继续进行

标签: python json file yaml


【解决方案1】:

类似下面的东西应该可以工作(假设文件只能是 json 或 yaml)

import json


def yaml_or_json(file_name):
    with open(file_name) as f:
        try:
            json.load(f)
            return 'json'
        except Exception:
            return 'yaml'

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 2019-07-08
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多