2017-08-09 53 views
0

新的活動indentifiers我想創建一個簡單的活動,以增加對Brightway2我的ecoinvent數據庫。我如何創建一個唯一的標識符充當「代碼」字段?獨特的萊威

我知道要從頭開始創建活動的唯一方式是:

bw.Database('database_name').new_activity('code') 

,但我需要指定一個代碼,我寧願它會自動生成(因爲當我們做一個現有的副本活動)。有沒有辦法做到這一點?

回答

0

docs,人們可以改爲:

Brightway2識別一個活動或與幾個屬性的MD5哈希流:對於的ecoinvent 2,名稱,位置,單位,和類別。對於ecoinvent 3,活動和參考產品名稱。

當潛水的bw2io代碼雖然(特別是utils),我們看到這實際上不是確切:萊威生成唯一碼作爲的ecoinvent的UUID爲活動和參考流的MD5哈希:

In [1] import brightway2 as bw 
     import hashlib 

     act = bw.Database('ecoinvent 3.3 cutoff').random() 
     act['code'] 

Out[1] '965e4a277c353bd2ed8250b49c0e24ef' 


In [2] act['activity'], act['flow'] 

Out[2] ('ff086b85-84bf-4e44-b60e-194c0ac7f7cf', 
     '45fbbc41-7ae9-46cc-bb31-abfa11e69de0') 

In [3] string = u"".join((act['activity'].lower(), act['flow'].lower())) 
     string 

Out[3] 'ff086b85-84bf-4e44-b60e-194c0ac7f7cf45fbbc41-7ae9-46cc-bb31-abfa11e69de0' 

In [4] str(hashlib.md5(string.encode('utf-8')).hexdigest()) 

Out[4] '965e4a277c353bd2ed8250b49c0e24ef' 

In [5] act['code'] == str(hashlib.md5(string.encode('utf-8')).hexdigest()) 

Out[5] True 

注意,這意味着你已經通知你的活動數據集的activityflow領域。您可以使用uuid庫生成這些文件。您也可以決定在MD5散列中使用其他字段(例如,文檔暗示的活動名稱和參考流程名稱)。

+0

感謝@MPa!活動和流場代表什麼?我試圖在我的交換工作室和活動數據庫中找到隨機活動的代碼,但找不到它們。在[模式]的文件(https://docs.brightwaylca.org/intro.html?highlight=schema)不談論這些領域(我想這是的ecoinvent特定太)。或者更簡單地說,我應該如何使用uuid庫生成它們? – Nabla

+0

它們是使用的ecoinvent的唯一代碼,請參閱活動概覽文件[這裏](http://www.ecoinvent.org/support/documents-and-files/information-on-ecoinvent-3/information-on-ecoinvent -3.html)。我不確定UUID是如何創建的。你可以使用一些領域(如活動中,你可以使用活動名稱,地點,開始日期和結束日期),將它們連接爲一個大字符串和使用'uuid.uuid5(uuid.NAMESPACE_DNS,your_string)'來生成UUID 。你可以自由地做你想做的事情,只要確保你提供給函數的字符串是唯一的。 – MPa