0

我想创建一个简单的活动来添加到我在 Brightway2 上的 ecoinvent 数据库。如何创建一个唯一标识符来充当“代码”字段?

我知道从头开始创建活动的唯一方法是:

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

但我需要指定一个代码,我宁愿让它自动生成(就像我们复制现有活动时一样)。有没有办法做到这一点?

4

1 回答 1

0

docs中,可以阅读:

Brightway2 使用几个属性的 MD5 哈希标识活动或流程:对于 ecoinvent 2,名称、位置、单位和类别。对于 ecoinvent 3,活动和参考产品名称。

但是,在深入研究bw2io代码时(特别是utils),我们发现这实际上并不准确:Brightway 生成一个唯一代码作为活动和参考流的 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 哈希中使用其他字段(例如,活动的名称和参考流的名称,正如文档所暗示的那样)。

于 2017-08-10T13:26:17.323 回答