2015-10-04 130 views
0

在我的一个项目中,我使用数量包来表示物理量。这些数量必须存储在png的元数据中,这些元数据必须可以被其他程序和我自己的程序读取。因此,数量必须作为字符串存储(对png元数据的要求),最好将其存储为可读格式。将字符串转换为python数量

尽管包数量提供了从数量到字符串的对话,但似乎没有现成的方法将这些字符串解析回数量。由数量包生成的字符串是,例如,

1.3 nm 
[1.4 3.1415 5.2] kg/m**2 

是否有将这些字符串转换回量的简单方法?数量?

+0

当寻找答案,我偶然发现[这](https://stackoverflow.com/questions/13611851/converting-string-to-physical-quantity-object-in-python)问题就来了上面的问题,这可能是同样的事情,但不幸的是,问题是封闭的,答案不符合我的所有需求。 – Thomas

+0

一个自我回答的问题很少有点含糊不清,以至于:1.任何有类似问题的人都很难找到它;和2.即使有更好的方法可以做到,其他人也无法回答。 – jonrsharpe

+0

我不明白你的意思@jonrsharpe。当我遇到这个问题时,我一直在搜索stackoverflow,并且遇到了我评论中提到的问题。不幸的是,那里的答案并不令人满意,所以我想出了自己的解决方案。然后我想分享这个解决方案,问问原始问题B/C,我认为其他人可能会遇到同样的问题。由于原来的问题已经结束,我不得不提出一个新问题来分享解决方案。我应该做什么不同? – Thomas

回答

1

我试过下面的代码,我认为它应该适用于大多数情况。

import quantities as pq 
import numpy as np 

def str2pq(s): 
    p1 = s.find('[') 
    if p1 < 0: 
     sq, su = s.split() 
     return pq.Quantity(float(sq), su) 
    else: 
     p2 = s.find(']') 
     ss = s[p1+1:p2-1] 
     return pq.Quantity(np.array(list(map(float, ss.split()))), s[p2+1:]) 

q = [pq.Quantity(10, 'nm'), pq.Quantity(1.0, pq.kilogram/pq.meter**2), pq.Quantity(np.array([1.2, 3.4]), pq.kilohertz)] 
qs = list(map(str, q)) 
qret = list(map(str2pq, qs)) 
print(q) 
print(qret)