有没有Python模块可以“解冻”用Perl的Storable冻结的数据?
我有一个旧的数据库,里面存储了一些简单的数据结构(谢天谢地,没有复杂的代码引用),这些数据是用Perl语言中的Storable
模块的nfreeze
方法写的。
现在我需要把这些数据加载到一个Python应用程序里。有没有人知道Python里有没有实现Storable
的thaw
功能的库?我在谷歌上找了也没找到。
如果真的找不到,我可以从Storable
的源代码中逆向工程出数据格式,但如果已经有人做过这个,那我就不想再去折腾了。
用代码来表达的话,假设有一个这样的Perl程序:
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64;
use Storable qw/nfreeze/;
my $data = {
'string' => 'something',
'arrayref' => [1, 2, 'three'],
'hashref' => {
'a' => 'b',
},
};
print encode_base64( nfreeze($data) );
我想要一个magic_function
,这样在Python中:
#!/usr/bin/env python
import base64
import pprint
import sys
def magic_function(frozen):
# A miracle happens
return thawed
if __name__ == '__main__':
frozen = base64.b64decode(sys.stdin.read())
data = magic_function(frozen)
pprint.pprint(data)
运行后能打印出:
{'string': 'something', 'arrayref': [1, 2, 'three'], 'hashref': {'a': 'b'}}
与Perl程序的输出一致。
2 个回答
6
如果你第一种方法不奏效,另一种选择是写一个简单的perl脚本来解冻数据,然后把它转换成JSON、YAML或者其他你在Python中容易处理的格式。
10
我不太清楚这个项目进展到什么程度,但看起来它的目标是实现你想要的功能: