PYTHON:有类似ast.literal_eval()的函数吗?

2023-11-30

我在使用 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)转储数据会导致这样的问题。

如果您只需要挽救已经生成的数据,那么您might摆脱类似以下的事情:

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实例 - 前提是这些实例可以在没有参数的情况下构造,这取决于上述假设。

如果这个最初的假设不成立,那么你的数据就是,正如伊格纳西奥put it,不可逆地损坏,并且任何巧妙的解析都无法找回丢失的位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PYTHON:有类似ast.literal_eval()的函数吗? 的相关文章

随机推荐

  • Delphi 使用可变参数列表调用 JNI 方法

    使用 Embarcadero 的 Jni api 单元 如何向需要它的 JNI 方法提供变量参数列表 例如 JNINativeInterface 的 CallStaticObjectMethodV 方法 清单 1 有一个 va list 类
  • 通过修改插件调用JEdtiable提交按钮

    解决方案 1 不使用 TinyMCE 如果您没有将 TinyMCE 与 JEditable 一起使用 请查看下面 Arman P 的帖子 解决方案 2 使用 TinyMCE 如果您使用 TinyMCE 那么不幸的是 Arman P s 方法
  • 获取自定义适配器中的项目列表

    那么 我有一个扩展 ArrayAdapter 的自定义适配器 我想从适配器内获取整个列表 可以这样做吗 我知道在 ArrayAdapter 构造函数中 您传入对象列表并将其存储为 mObjects 但该列表是私有的 我想在构造函数中的自定义
  • Python 2.7 中具有多个函数参数的多重处理

    我正在尝试实现多处理来加速复制循环 但无法让它在 Python27 中工作 这是我的程序的一个非常简化的版本 基于 SO 的文档和其他答案 例如用于多个参数的 Python multiprocessing pool map 我意识到关于多处
  • 使用 JQuery 获取图像的真实尺寸

    给定图像路径列表 如何迭代它们并找到实际的图像尺寸 我假设我必须将它们插入没有宽度或高度属性的 DOM 中 并对它们执行 width 和 height var paths path image png somewhere page jpg
  • 内存映射文件 java NIO

    我了解如何创建内存映射文件 但我的问题是在下面一行中说 FileChannel roChannel new RandomAccessFile file r getChannel ByteBuffer roBuf roChannel map
  • include_next 预处理器指令导致 MSVC 中出现问题

    我知道 inlcude next 恰好是 C 预处理器的 GNU 扩展 我在使用 MSVC 编译 Gnu 库代码时遇到问题 例如 有一个 stdio h 头文件或者更确切地说GNU like
  • Java / NetBeans - 如何进入 jar 文件?

    我在 Netbeans 中有一个 Java 项目 其属性的库部分列出了几个 jar 文件 我在其中一个 jar 文件中发现了一个错误 我想在调试时介入它 这是我到目前为止所做的 我已经找到了源代码 jar 文件 我将该源代码作为一个项目打开
  • 本地运行SAM时如何连接RDS实例?

    我正在使用 SAM 无服务器应用程序模型 在本地测试连接到云中的 Aurora RDS 实例的 Lambda 函数 使用以下命令 sam local invoke lambda function name event event json
  • 如何使用webp图片并支持safari

    由于压缩效果更好 我尝试在整个网站中使用 webp 图像 不过我知道 safari 不支持 webp 图像是使用加载的background image url img img webp 然后我应用其他background特性 我明白了
  • 在c中使用逗号运算符

    我读过逗号运算符用于分配表达式 并将正确的表达式提供给左值 但是为什么这个程序在不使用括号的情况下将左表达式分配给左值呢 我正在使用 Turbo C 编译器 int b 2 int a a b 2 b 5 prints 10 as expe
  • lua代码反混淆

    我最近下载了一些 lua 代码 我发现里面有一些混淆的字符串 这让我想知道那里使用了什么样的混淆技术 有人有想法吗 local code 27 76 117 97 81 0 1 4 4 4 8 0 64 0 0 0 64 67 58 92
  • Swift macOS 弹出窗口检测更改暗模式

    从图像中可以看出 我有一个弹出窗口 我必须确保当屏幕模式发生变化 深色模式或浅色模式 时 弹出窗口的颜色会发生变化 颜色取自资源 如下所示 NSColor named backgroundTheme withAlphaComponent 1
  • 在 Project Reactor 中处理数据的最佳方法

    在项目反应器中处理数据的最佳方法是什么 使用平面地图 public Mono
  • 旋转 MKMapView 的内容

    我需要根据罗盘值旋转mapView的内容 float myHeadingValue newHeading trueHeading 为了旋转地图 我使用这个 mapView setTransform CGAffineTransformMake
  • 删除任务栏上的 Google Chrome 固定图标

    我想删除任务栏上的 Google Chrome 固定图标 卸载不会删除图标 我修改了代码以仅删除 Google Chrome lnk 我想要做的 了解 VBS 是循环遍历所有用户文件夹 而不仅仅是当前用户 我认为当前用户定义为strCurr
  • 使用其他类的类字段

    我对 C 和 OOP 还很陌生 所以请耐心等待 我有两个具有不同命名空间的类 namespace Class1 public class class1 public double x public double y namespace Cl
  • Scala 泛型:如何声明类型必须是案例类?

    我有几个案例类count场地 默认情况下为 1 我在代码中进行了归约 对重复项进行分组并对值求和以查找每个对象的数量 例如 case class Person name String count 1 personList groupBy n
  • 为什么 objdump 显示该汇编语言指令的操作码为空?

    我有以下汇编代码 global start section text start add byte eax al 编译和链接后 我尝试查看操作码 objdump d eax o eax o file format elf32 i386 Di
  • PYTHON:有类似ast.literal_eval()的函数吗?

    我在使用 ast literal eval 时遇到问题 在下面的示例中 我只想将字符串 myText 转换为字典 但 ast literal eval 尝试评估 lt main myClass instance at 0x000000005