gpt4 book ai didi

python - 使用具有以下格式的 python 解析文件的最佳方法(防错/万无一失)是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:10 26 4
gpt4 key购买 nike

########################################
# some comment
# other comment
########################################

block1 {
value=data
some_value=some other kind of data
othervalue=032423432
}

block2 {
value=data
some_value=some other kind of data
othervalue=032423432
}

最佳答案

最好的方法是使用现有的格式,例如 JSON。

这是您的格式的示例解析器:

from lepl import (AnyBut, Digit, Drop, Eos, Integer, Letter,
NON_GREEDY, Regexp, Space, Separator, Word)

# EBNF
# name = ( letter | "_" ) , { letter | "_" | digit } ;
name = Word(Letter() | '_',
Letter() | '_' | Digit())
# words = word , space+ , word , { space+ , word } ;
# two or more space-separated words (non-greedy to allow comment at the end)
words = Word()[2::NON_GREEDY, ~Space()[1:]] > list
# value = integer | word | words ;
value = (Integer() >> int) | Word() | words
# comment = "#" , { all characters - "\n" } , ( "\n" | EOF ) ;
comment = '#' & AnyBut('\n')[:] & ('\n' | Eos())

with Separator(~Regexp(r'\s*')):
# statement = name , "=" , value ;
statement = name & Drop('=') & value > tuple
# suite = "{" , { comment | statement } , "}" ;
suite = Drop('{') & (~comment | statement)[:] & Drop('}') > dict
# block = name , suite ;
block = name & suite > tuple
# config = { comment | block } ;
config = (~comment | block)[:] & Eos() > dict

from pprint import pprint

pprint(config.parse(open('input.cfg').read()))

输出:

[{'block1': {'othervalue': 32423432,
'some_value': ['some', 'other', 'kind', 'of', 'data'],
'value': 'data'},
'block2': {'othervalue': 32423432,
'some_value': ['some', 'other', 'kind', 'of', 'data'],
'value': 'data'}}]

关于python - 使用具有以下格式的 python 解析文件的最佳方法(防错/万无一失)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/493484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com