【问题标题】:Ways to store and access large (~10 GB) lists in Python?在 Python 中存储和访问大型(~10 GB)列表的方法?
【发布时间】:2011-01-24 02:31:27
【问题描述】:

我有大量字符串用于自然语言处理研究,我想要一种将其存储在 Python 中的好方法。

我可以使用 pickle,但是将整个列表加载到内存中是不可能的(我相信),因为它大约 10 GB 大,而且我没有那么多的主内存。目前,我将列表与搁置库一起存储...搁架由字符串“0”、“1”、...、“n”索引,这有点笨拙。

有没有更好的方法将这样的对象存储在单个文件中,并且仍然可以随机(ish)访问它?

可能最好的选择是将其拆分为多个列表。

谢谢!

【问题讨论】:

    标签: python list nlp pickle shelve


    【解决方案1】:

    根据您打算如何获取数据,SQLite3 可能是最好的方法。 SQLite3 在随机访问关系数据方面表现出色,但如果您的数据不是非常相关,它可能没有多大意义。 (即使你拥有的只是一个 'id' 数字,然后是你的字符串,我认为用于字符串底层存储的 SQLite3 可能很棒。)

    如果您能找到某种机制,通过某种方式将您的字符串组合在一起(例如,如果您的某些句子包含隐含的对象或主题,并且您想专门研究它们;或者取决于您的字符串的来源,无论是正式的、非正式的还是超非正式的)或类似的东西,那么您可以通过对其进行分区来显着减少数据的“工作集”,并有可能大大提高您的研究吞吐量。但是,如果您打算真正随机访问,那么一大堆可能是最好的。

    希望这会有所帮助。

    【讨论】:

    • 我猜数据库确实更适合这种任务。我想我会试一试:D
    • 刚刚移植到 SQLite3。处理速度要快得多,大约需要一个架子占用的磁盘空间的三分之一!
    • 哈!更快更小。我喜欢 SQLite3。 :D
    【解决方案2】:

    您可以考虑使用数据库;可能是一个句子或字符串表,每个字符串都有一行。

    借助一些对象关系映射器(例如sqlalchemy),您可以对数据有一个面向对象的视图并迭代字符串,或者按顺序处理更大的数据子集(如果这适用于您的任务) .

    此外,您可以为每个句子存储额外的数据,以便对要处理的项目集进行更细粒度的控制。

    【讨论】:

    • 我没听说过 sqlalchemy,但它看起来很有趣。
    【解决方案3】:

    我会说使用搁置(使用 bdb 后端)或 Sqlite3。
    我会使用 SQLite3,对于一个简单的列表,像 CREATE TABLE list(idx int primary key, value text); 这样的表就足够了。

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 2018-06-29
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多