2017-08-09 49 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