有没有Python模块可以“解冻”用Perl的Storable冻结的数据?

7 投票
2 回答
1709 浏览
提问于 2025-04-16 14:41

我有一个旧的数据库,里面存储了一些简单的数据结构(谢天谢地,没有复杂的代码引用),这些数据是用Perl语言中的Storable模块的nfreeze方法写的。

现在我需要把这些数据加载到一个Python应用程序里。有没有人知道Python里有没有实现Storablethaw功能的库?我在谷歌上找了也没找到。

如果真的找不到,我可以从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

我不太清楚这个项目进展到什么程度,但看起来它的目标是实现你想要的功能:

https://pypi.org/project/storable/

撰写回答