在Python中存储和访问大型(约10GB)列表的方法?
我有一大堆字符串,用于自然语言处理的研究,我想在Python中找个好方法来存储它们。
我可以用pickle来存储,但把整个列表加载到内存中几乎是不可能的,因为它大约有10GB,而我的内存根本装不下。目前我用shelve库来存储这个列表……这个shelf是通过字符串“0”、“1”……“n”来索引的,这样有点麻烦。
有没有更好的方法可以把这样的对象存储在一个文件里,同时还能随机(大致)访问它呢?
也许最好的办法是把它分成多个列表。
谢谢!
3 个回答
我建议你使用shelve(它用的是bdb作为后台)或者Sqlite3。
我个人更倾向于使用SQLite3,对于一个简单的列表,像这样创建一个表就可以了:CREATE TABLE list(idx int primary key, value text);
你可以考虑使用数据库;比如可以创建一个句子或字符串的表格,每一行存放一个字符串。
借助一些对象关系映射工具(比如 sqlalchemy),你可以用面向对象的方式来查看数据,这样就可以逐个处理字符串,或者按顺序处理更大一部分的数据(如果这对你的任务有帮助的话)。
此外,你还可以为每个句子存储额外的数据,这样可以更细致地控制你想要处理的项目集合。
根据你打算如何获取数据,SQLite3 可能是一个不错的选择。SQLite3 在随机访问关系数据方面表现很好,但如果你的数据关系不强,那可能就不太合适了。(即使你只有一个 'id' 号码和一个字符串,我觉得用 SQLite3 来存储这些字符串也很不错。)
如果你能找到一种方法,把你的字符串按照某种方式分组(比如,如果你的句子中有隐含的对象或主语,你想专门研究这些;或者根据你的字符串来源,可能是正式的、非正式的或非常非正式的),这样你就可以通过分区大大减少数据的“工作集”,从而可能显著提高研究的效率。但如果你需要真正的随机访问,那么把所有数据放在一起可能更好。
希望这些对你有帮助。