如何在python中存储嵌套数据?

2024-05-29 04:10:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我把标记为“books”的数据嵌套如下

book0 = {'authorId': u'4657987','bookId': u'3532901',
 'genre': u'horror','freeChapters': [[u'2015-07-03 15:14:25', u'3376'],
  [u'2015-07-03 17:52:39', u'2116'],...,[u'2015-07-26 20:08:11', u'2120'],
  [u'2015-07-27 20:12:12', u'2139']],'updateStatus': u'to be continued',
 'wordCount': u'56322'} 

book1 = {'authorId': u'3840480','bookId': u'3453158',
 'genre': u'romance','freeChapters': [[u'2015-04-07 18:58:15', u'317'],
  [u'2015-04-02 21:46:36', u'2103'],
  [u'2015-04-03 13:02:17', u'2416'], ...,
  [u'2015-07-24 00:07:43', u'2195']],'updateStatus': u'completed',
 'chargedChapters': [[u'2015-07-25 14:14:53', u'10'],
  [u'2015-07-26 00:07:46', u'11'],
  [u'2015-07-27 00:07:58', u'10'],
  [u'2015-07-28 00:07:52', u'10']],
 'wordCount': u'269059'}

。。。在

我希望有大约20万个这样的东西,每个都是从互联网上刮来的。考虑到每一本书都需要一些努力和时间,我想一本一本地保存下来。我不认为JSON允许我这样做,而且我目前正在使用pickle。不过,以后我可能需要参考一本特别的书。我恐怕我得一次又一次地拆开这件事。在我的例子中,存储这些对象的最佳方法是什么?在

我最终用行分隔的JSON解决了这个问题。在


Tags: to数据标记jsonbebookswordcountcontinued
3条回答

最容易做的事情之一是tryklepto,它提供了一个用python存储关系数据的API。klepto提供了一个字典接口,用于在数据库或类似数据库的磁盘存储中存储项。你遇到的一个问题是把所有的书都存储在一个文件中。但是,如果您为每个文件存储一个条目(一本书),那么当您想访问一本书时,速度会快得多。klepto使这一点变得容易,因为您与dictionary对象交互,它将从磁盘上正确的pickle文件或存储在数据库中的对象执行其余的检索。klepto的目的是使处理大数据存储和检索键值对变得容易。所以这是你首先要解决的问题。klepto将使您能够尝试在磁盘上存储每个文件的一个条目,然后如果您发现这不够,可以很容易地将存档后端切换到一个或多个SQL数据库表。另一个选择是存储在hdf5文件中。在

第二件事是您需要查看要使用哪种存储格式(picklejson,等等)。klepto在一个公共接口中提供了近100种存储和编码格式的组合,因此您可以通过尝试并查看哪个最健壮、最快来确定适合您的。正如其他人建议的那样,如果您关心python版本之间的安全性和健壮性,并且您希望存储的对象很简单(看起来您的对象也很简单),那么我将使用json。如果您需要存储更复杂的对象,比如类实例或lambda,那么您可能需要使用pickledill)作为编码器……它会慢一点,但更健壮。还有一些选项比picklejson快得多,但是没有持久性。在klepto中切换编码和存储格式也非常简单。在

政治上正确的答案是“视情况而定”。也就是说,去JSON。在

Pickle是一种功能强大的格式,能够重建具有丰富数据类型的复杂对象。但是,它相对较慢,它将您绑定到python,对于不可信的数据不是100%安全的。它提供了丰富的输入功能,但没有速度、可移植性或安全性。它也不是人类可读的。在

XML是一种旧格式,已不再使用。它不能直接映射到面向对象的设计。在大多数现代语言中,读和写XML都很麻烦,冗长,并且产生不易理解的抽象。现在使用XML的理由很少。在

JSON是一种被广泛采用的轻量级格式。它提供有限的数据类型(例如日期缺失)。这意味着stringifying很多类型,但也意味着格式相对安全:不可信的数据不会让您感到惊讶。它的快速,高度便携和人类可读性。它几乎直接映射到面向对象的设计中。使用JSON的库和工具有很多,这意味着很容易转换成其他格式。在

JSON是默认选择。除非有理由避免,否则就用它。在任何情况下,都可以从JSON开始,以后再切换。在

JSON。它在许多语言中都被接受,轻量级的,并将保持您所拥有的这种层次结构。在

相关问题 更多 >

    热门问题