如何在OpenRefine中用GREL/Python批量导入其他项目指定列
批量导入多列到OpenRefine现有项目(通过ID匹配)
方法一:使用GREL脚本(无需额外工具)
导入Project2为临时OpenRefine项目
- 打开OpenRefine,导入Project2的TSV文件生成临时项目,确保项目包含用于匹配的
id列,以及要导入的Column E、Column F。
- 打开OpenRefine,导入Project2的TSV文件生成临时项目,确保项目包含用于匹配的
导出临时项目为JSON格式
- 在临时项目右上角点击「导出」→「导出项目」,选择JSON格式保存到本地。
在Project1中批量添加匹配列
- 添加
Column E:点击任意列下拉菜单→「添加列基于此列」,列名设为Column E,在表达式框输入:
替换with(json.parse(file_contents("/实际路径/project2-export.json")).rows, row, row.cells.id.value == cells.id.value, row.cells["Column E"].value)[0].or("无匹配")/实际路径/project2-export.json为你保存的JSON文件路径,or("无匹配")可根据需求删除(无匹配时会显示空值)。 - 重复上述步骤添加
Column F,仅需将表达式中的"Column E"替换为"Column F":with(json.parse(file_contents("/实际路径/project2-export.json")).rows, row, row.cells.id.value == cells.id.value, row.cells["Column F"].value)[0].or("无匹配")
- 添加
方法二:使用Python脚本(适合复杂批量场景)
如果需要自定义匹配逻辑或批量处理更多列,可通过Python结合pandas和OpenRefine客户端实现:
安装依赖
终端运行以下命令:pip install pandas openrefine-client编写执行脚本
import pandas as pd from openrefine_client import OpenRefineClient # 读取Project2的TSV,仅保留需要的列 project2_df = pd.read_csv("实际路径/project2.tsv", sep="\t", usecols=["id", "Column E", "Column F"]) # 转换为id键控的字典,方便匹配 project2_data = project2_df.set_index("id").to_dict(orient="index") # 连接OpenRefine服务(确保OpenRefine已启动,默认端口3333) client = OpenRefineClient(host="http://localhost:3333") # 获取Project1实例,替换为你的Project1 ID(可在项目URL末尾获取) project1 = client.get_project("your-project1-id") # 批量添加列 # 添加Column E project1.add_column( new_column_name="Column E", expression='value = project2_data.get(cells["id"].value, {}).get("Column E", "无匹配")', base_column_name="id" ) # 添加Column F project1.add_column( new_column_name="Column F", expression='value = project2_data.get(cells["id"].value, {}).get("Column F", "无匹配")', base_column_name="id" ) # 保存更改 project1.apply_operations()注意:替换脚本中的文件路径和Project1 ID,
"无匹配"可根据需求删除。
内容的提问来源于stack exchange,提问作者Erfanesi
相关产品推荐
相关产品推荐

