如何在无R解释器环境下用Python读取并反序列化R生成的序列化对象
R序列化文件无R依赖Python解析方案
问题背景
需要将R生成的序列化对象导入Python处理,当前使用的远程系统未安装R解释器,无法通过导出csv中转的常规方案实现。此前尝试pickle、json处理均未成功,需要无R依赖的解析方案。
原始R序列化生成逻辑
生成序列化文件的R代码如下:
x <- serialize(list(1,2,3), NULL, ascii=TRUE) xzip <- memCompress(x,'bzip2') to.write = file("./rbinfile.dat", "wb") writeBin(xzip, to.write) close(to.write)
现有Python代码问题
已实现的Python处理代码中,最后一步binascii.hexlify(x)为错误操作,会将解压得到的R序列化二进制流转为十六进制字符串,破坏原始数据结构,删除该步骤即可得到待解析的原始R序列化数据。
实现反序列化的方案
使用纯Python实现的R序列化解析库rdata即可完成解析,该库无需依赖系统R解释器,自主实现R数据格式解析逻辑。
- 安装依赖
执行pip命令安装rdata:pip install rdata - 完整处理代码
import bz2 import rdata # 读取压缩文件并解压 with open("./rbinfile.dat","rb") as fObj: xzip = fObj.read() x = bz2.decompress(xzip) # 解析R序列化数据 parsed_data = rdata.parser.parse_data(x) result = rdata.conversion.convert(parsed_data) # 输出结果为[1, 2, 3] print(result)
内容的提问来源于stack exchange,提问作者bruinon
相关产品推荐
相关产品推荐

