如何根据值的 MD5 哈希在 Openrefine 中创建 UUID
How to create UUID in Openrefine based on the MD5 hash of the values
我正在尝试基于 OpenRefine 中单元格值的 md5 散列(使用 Jython)创建 UUID,但我在将值传递给函数时遇到问题。
我可以使用以下表达式创建 UUID:
import uuid;
return str(uuid.uuid4());
但我想使用单元格值的 md5 散列,所以我尝试遵循公式
uuid.uuid3(namespace, name)
但是,我无法将值传递给函数。尝试次数:
import uuid;
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value));
收到以下错误:
Error: Traceback (most recent call last): File "", line 3,
in temp_448166737 File "/Applications/OpenRefine
3.2b.app/Contents/Resources/webapp/extensions/jython/module/MOD-INF/lib/jython-standalone-2.7.1.jar/Lib/uuid.py",
line 528, in uuid3 UnicodeDecodeError: 'ascii' codec can't decode byte
0xa7 in position 1: ordinal not in range(128)
在不使用单元格值的情况下,表达式效果很好。范例
import uuid;
return str(uuid.uuid3(uuid.NAMESPACE_DNS, 'example'));
使用字符串 "example" 并计算每个单元格的 UUID c5e5f349-28ef-3f5a-98d6-0b32ee4d1743。然而,这不是想要的结果。
关于如何将表达式中 OpenRefine 中单元格的值传递给 Jython 的任何想法?
您只需将 value
中的 unicode 字符串编码为 .encode('utf-8')
,如 here:
所述
import uuid
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value.encode('utf-8')))
我正在尝试基于 OpenRefine 中单元格值的 md5 散列(使用 Jython)创建 UUID,但我在将值传递给函数时遇到问题。
我可以使用以下表达式创建 UUID:
import uuid;
return str(uuid.uuid4());
但我想使用单元格值的 md5 散列,所以我尝试遵循公式
uuid.uuid3(namespace, name)
但是,我无法将值传递给函数。尝试次数:
import uuid;
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value));
收到以下错误:
Error: Traceback (most recent call last): File "", line 3, in temp_448166737 File "/Applications/OpenRefine 3.2b.app/Contents/Resources/webapp/extensions/jython/module/MOD-INF/lib/jython-standalone-2.7.1.jar/Lib/uuid.py", line 528, in uuid3 UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 1: ordinal not in range(128)
在不使用单元格值的情况下,表达式效果很好。范例
import uuid;
return str(uuid.uuid3(uuid.NAMESPACE_DNS, 'example'));
使用字符串 "example" 并计算每个单元格的 UUID c5e5f349-28ef-3f5a-98d6-0b32ee4d1743。然而,这不是想要的结果。
关于如何将表达式中 OpenRefine 中单元格的值传递给 Jython 的任何想法?
您只需将 value
中的 unicode 字符串编码为 .encode('utf-8')
,如 here:
import uuid
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value.encode('utf-8')))