gpt4 book ai didi

PYTHON : There is a function similar to ast. literal_eval ()?

转载 作者:行者123 更新时间:2023-11-28 16:33:12 27 4
gpt4 key购买 nike

我在使用 ast.literal_eval() 时遇到了问题。在下面的示例中,我只想将字符串 (myText) 转换为字典。但是 ast.literal_eval() 尝试评估 <__main__.myClass instance at 0x0000000052D64D88>并给我一个错误。我完全理解这个错误,但我想知道是否有办法避免它(使用其他函数或使用其他方法来使用函数 ast.literal_eval)

import ast

myText = "{<__main__.myClass instance at 0x0000000052D64D88>: value}"
ast.literal_eval(myText)

# Error: invalid syntax
# Traceback (most recent call last):
# File "<maya console>", line 4, in <module>
# File "C:\Program Files\Autodesk\Maya2016\bin\python27.zip\ast.py", line 49, in literal_eval
# node_or_string = parse(node_or_string, mode='eval')
# File "C:\Program Files\Autodesk\Maya2016\bin\python27.zip\ast.py", line 37, in parse
# return compile(source, filename, mode, PyCF_ONLY_AST)
# File "<unknown>", line 1
# {<__main__.myClass instance at 0x0000000052D64D88>: value}
# ^
# SyntaxError: invalid syntax #

预先感谢您的帮助!

最佳答案

您真正想要做的是使用 pickle.dump 转储数据并使用 pickle.load 加载它(或等价物,例如 json 等)。使用 repr(data)转储数据会导致这样的问题。

如果您只需要挽救已经生成的数据,您可能可以通过以下方式逃脱:

def my_literal_eval(s):
s = re.sub(r"<__main__.myClass instance at 0x([^>]+)>", r'"<\1>"', s)
dct = ast.literal_eval(s)
return {myClass(): v for v in dct.itervalues()}

使用示例:

>>> import ast, re
>>> class myClass(object): pass
...
>>> myText = "{<__main__.myClass instance at 0x0000000052D64D88>: {'name': 'theName'}, <__main__.myClass instance at 0x0000000052D73F48>: {'name': 'theName'}}"
>>> my_literal_eval(myText)
{<__main__.myClass object at 0x7fbdc00a4b90>: {'name': 'theName'}, <__main__.myClass object at 0x7fbdc0035550>: {'name': 'theName'}}

这仅在 myClass 时有效实例没有任何有用的信息,但仅用于身份验证。这个想法是首先通过替换 <__main__.myClass instance ...> 来修复字符串可以被 ast.literal_eval 解析的字符串,然后将其替换为实际的 myClass实例 - 假设这些可以在没有参数的情况下构造,这取决于上述假设。

如果这个初始假设不成立,那么您的数据就是 Ignacio put it ,不可逆转的损坏,再多巧妙的解析也无法找回丢失的位。

关于PYTHON : There is a function similar to ast. literal_eval ()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774297/

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