3

我有一个大字典(输出为 366MB 中的字符串,~383764153 行文件文本文件),我想将其存储在数据库中以便快速访问并跳过填充字典所涉及的计算时间。

我的字典由文件名/内容对字典组成。小子集:

{
    'Reuters/19960916': {
        '54826newsML': '<?xml version="1.0"
encoding="iso-8859-1" ?>\r\n<newsitem itemid="54826" id="root"
date="1996-09-16" xml:lang="en">\r\n<title>USA: RESEARCH ALERT -
Crestar Financial cut.</title>\r\n<headline>RESEARCH ALERT - Crestar
Financial cut.</headline>\r\n<text>\n<p>-- Salomon Brothers analyst
Carole Berger said she cut her rating on Crestar Financial Corp to
hold from buy, at the same time lowering her 1997 earnings per share
view to $5.40 from $5.85.</p>\n<p>-- Crestar said it would buy
Citizens Bancorp in a $774 million stock swap.</p>\n<p>-- Crestar
shares were down 2-1/2 at 58-7/8. Citizens Bancorp soared 14-5/8 to
46-7/8.</p>\n</text>\r\n<copyright>(c) Reuters Limited',
        '55964newsML': '<?xml version="1.0" encoding="iso-8859-1"
?>\r\n<newsitem itemid="55964" id="root" date="1996-09-16"
xml:lang="en">\r\n<title>USA: Nebraska cattle sales thin at
$114/dressed-feedlot.</title>\r\n'
    }
}

我认为MongoDB会很合适,但看起来它要求键和值都必须是 Unicode,并且由于我从上面获取文件名,namelist()因此ZipFile不能保证是 Unicode。

您如何建议我将这本字典序列化到数据库中?

4

2 回答 2

5

pymongo不需要字符串是 unicode,它实际上按原样发送 ascii 字符串并将 unicode 编码为 UTF8。从 pymongo 检索数据时,您总是得到 unicode。@@ http://api.mongodb.org/python/2.0/tutorial.html#a-note-on-unicode-strings

如果您的输入包含具有高位字节(如ab\xC3cd)的“国际”字节字符串,您需要将这些字符串转换为 unicode 或将它们编码为 UTF-8。这是一个处理任意嵌套字典的简单递归转换器:

def unicode_all(s):
    if isinstance(s, dict):
        return dict((unicode(k), unicode_all(v)) for k, v in s.items())
    if isinstance(s, list):
        return [unicode_all(v) for v in s]
    return unicode(s)
于 2012-06-06T18:59:23.517 回答
0

如果你有内存(你显然有,因为你填充了字典开始)-- cPickle。或者,如果您想要一些需要更少 RAM 但会更慢的东西 - shelve

于 2012-06-06T18:40:46.117 回答