gpt4 book ai didi

python - 如何将 if else 代码转换为 json(或其他)格式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:15 31 4
gpt4 key购买 nike

考虑这个(任意示例,python 语法)代码:

number = 42
name = 'arthur'

if number != 42:
if name == 'arthur':
number = 42
else
if name == 'zaphod':
number = 0

我想以某种方式将其转换为某种格式,以便可以将其保存为文件。
我最初的想法是使用 json,但这不是具体要求。

我的想法是上面的代码会翻译成这样:

{'number':
{'42':
['name': {'zaphod':0}],
'other':
['name':{'arthur':42}]
}
}

基本上是说,在流程结束时,可以从文件中读取 if-else 基本原理,并通过导航 json 找到正确的结果(如果它存在)。

我正在寻找是否有任何已知的方法可以做到这一点或一些关于简单方法的文档。

谢谢

最佳答案

听起来您正在追求分层数据存储......

可能值得研究一下 XML and XPaths ,只是想一下您的情况,并熟悉一些概念。

也可以使用 JSON 来完成此操作,使用类似 JSONPath 的东西- 但我建议首先尝试一下 XML/XPaths,因为它更清晰一些,而且是一项更成熟的技术。

<小时/>

这是我想到的那种事情的演示:

text.xml:

<root>
<condition var_name="number" op="not-equal" value="42">
<condition var_name="name" op="equal" value="arthur">
<result var_name="number" value="42"/>
</condition>
</condition>
<condition op="default">
<condition var_name="name" op="equal" value="zaphod">
<result var_name="number" value="0"/>
</condition>
</condition>
</root>
#!/usr/bin/env python3

from pprint import pprint
import xml.etree.ElementTree as ET

# the <conditional> operations
ops = {
'equal': lambda data, var_name, value: data[var_name] == value,
'not-equal': lambda data, var_name, value: data[var_name] != value,
}

def el_get(el, attr_name):
value = el.get(attr_name)
try:
value = int(value) # try to force numerics for the demo...
except:
pass
return value

def dig(root, data):
# get any results, and apply them to the data
for el in root.findall('./result[@var_name][@value]'):
var_name = el_get(el, 'var_name')
value = el_get(el, 'value')

if var_name not in data:
raise Exception('bad var_name (%s)' % ( var_name ))

data[var_name] = value

# run through the conditions, running with the first that matches
for el in root.findall('./condition[@var_name][@op][@value]'):
op = el_get(el, 'op')

if op not in ops:
raise Exception('bad operation (%s)' % ( op ))

var_name = el_get(el, 'var_name')
value = el_get(el, 'value')

if var_name not in data:
raise Exception('bad var_name (%s)' % ( var_name ))

result = ops[op](data, var_name, value)

if result is True:
dig(el, data)
return

# run through the defaults, taking the first
for el in root.findall('./condition[@op="default"]'):
dig(el, data)
return

return

# grab the XML
root = ET.parse('test.xml').getroot()

# process & print
data = { 'number': 21, 'name': 'arthur' }
dig(root, data)
pprint(data) # pass

# process & print
data = { 'number': 21, 'name': 'zaphod' }
dig(root, data)
pprint(data) # pass

# process & print
data = { 'number': 42, 'name': 'arthur' }
dig(root, data)
pprint(data) # pass

# process & print
data = { 'number': 42, 'name': 'zaphod' }
dig(root, data)
pprint(data) # pass

关于python - 如何将 if else 代码转换为 json(或其他)格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211570/

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