2015-10-04 128 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)