将python对象转换为String,编辑它并转换回原始类型的对象

时间:2014-01-24 00:25:12

标签: python matplotlib translate-animation

晚上好,我有这种类型的python对象。有没有办法将它转换为字符串,编辑和转换回来?

 <class 'matplotlib.transforms.CompositeGenericTransform'>

当我通过print(变量)打印时,它看起来像这样:

CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())), CompositeGenericTransform(BboxTransformFrom(TransformedBbox(Bbox('array([[ -19.5      ,  -10.7983871],\n       [ 221.5      ,  140.7983871]])'), TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())))), BboxTransformTo(TransformedBbox(Bbox('array([[ 0.125,  0.25 ],\n       [ 0.9  ,  0.9  ]])'), BboxTransformTo(TransformedBbox(Bbox('array([[ 0.,  0.],\n       [ 8.,  6.]])'), Affine2D(array([[ 80.,   0.,   0.],
       [  0.,  80.,   0.],
       [  0.,   0.,   1.]])))))))), Affine2D(array([[ 0.99968918, -0.02493069,  6.98903935],
       [ 0.02493069,  0.99968918, -8.59039721],
       [ 0.        ,  0.        ,  1.        ]]))), Affine2D(array([[ 0.99968918, -0.02493069,  6.93499095],
       [ 0.02493069,  0.99968918, -7.14592338],
       [ 0.        ,  0.        ,  1.        ]]))), Affine2D(array([[ 0.99968918, -0.02493069,  6.88226449],
       [ 0.02493069,  0.99968918, -6.30113809],
       [ 0.        ,  0.        ,  1.        ]]))), Affine2D(array([[ 0.99968918, -0.02493069,  6.96735103],
       [ 0.02493069,  0.99968918, -7.27368166],
       [ 0.        ,  0.        ,  1.        ]])))

3 个答案:

答案 0 :(得分:2)

您可以使用Pickle执行此操作,它是Python的对象序列化库。

答案 1 :(得分:1)

一般来说,这是不可行的。大多数对象无法通过str表示来构造。*(某些对象可以从他们的repr构建,但您不应该依赖它。)

在特定情况下,您当然可以为类型str编写特定的解析器。

但这几乎总是一个坏主意。相反,选择一种交换格式,然后编写代码将您的对象转换为该交换格式并返回。许多对象(特别是在NumPy系列中)已经知道如何使用各种文本格式(如CSV或JSON)将自己呈现为/构建自己,因此调用astext和{ {1}}或fromtexttojson或其他。


*甚至不能用fromjson表示来构造字符串;它真的只有数字和基本的集合。

答案 2 :(得分:1)

你可以使用带有转储和装载的泡菜,但它可能很脆弱。不建议。

import pickle

x  = {'a':1,'b':2}
out = pickle.dumps(x)
out = out.replace("I1","I66")
x2 = pickle.loads(out)
print x2 # {'a': 66, 'b': 2}