OpenRefine 是否支持 Python3?

Does OpenRefine support Python3?

我有自己的 Python 库,我想在 OpenRefine 中将其用作 described here

然而,OpenRefine 中的所有 Python 代码似乎都通过支持 only Python 2

的 Jython

有没有办法在 OpenRefine 中 运行 Python3 代码?

干杯

简短回答:否。 Openrefine 使用 Jython,它目前基于 python 2.7,目前或短期内没有迁移到 3.X 版本的计划。

但是。

只要在您的计算机上安装了 python3,就有一个技巧可以做到这一点。 Python2 允许执行命令行 script/tool,并收集结果。

这个简单的 python2 脚本可以做到这一点:

# This jython2.7 script has to be executed as jython, not GREL
# It allows you to execute a command (CLI) in the terminal and retrieve the result.

# import basic librairies
import time
import commands
import random
# get status and output of the command
status, output = commands.getstatusoutput(value)
# add a random between 2 and 5s pause to avoid ddos on servers... Be kind to APIs!
time.sleep(random.randint(2, 5))
# returns the result of the command
return output.decode("utf-8")

我用它来执行本地 python3 个脚本,还有 dig、curls 等...

用例: 假设我在 A 列中有一堆 Internet 域。我想在这些域上执行 dig SOA 命令。

  • 我创建了一个基于 A 的列 B:“dig SOA”+value,它将提供我想要执行的确切命令。
  • 我使用上面的 jython 脚本创建了一个基于 B 的 C 列。
  • 然后我解析结果。

此脚本是纯 python2,不依赖额外的库,应该永远有效。

免责声明:第三方应用程序执行本地代码应谨慎。

我需要类似的东西(不得不“猜测”一个专栏的文本是用什么语言编写的),而且我发现这是一个很好的解决方案,而且工作速度非常快(有一些“额外功能”很容易添加)是将我的 python3 程序包装为一个烧瓶网络 API(花了 10 分钟),并通过“通过获取 URL 添加列”从 OpenRefine 使用它。

额外的好处是,在我们现场最快的机器上 运行 它相当容易,添加缓存等

我唯一希望看到的改进(在 OpenRefine 方面)是能够选择性地并行获取多个 URLs,然后你可以 运行 多个 flask 实例在几台机器上,并加快一点速度。