gpt4 book ai didi

python - 使用 pickle 将巨大的二元字典保存到文件中

转载 作者:行者123 更新时间:2023-12-05 07:58:16 35 4
gpt4 key购买 nike

我的一个 friend 写了这个小程序。textFile大小为 1.2GB(相当于 7 年的报纸)。他成功地创建了字典,但无法使用 pickle 将其写入文件(程序挂起)。

import sys
import string
import cPickle as pickle

biGramDict = {}

textFile = open(str(sys.argv[1]), 'r')
biGramDictFile = open(str(sys.argv[2]), 'w')


for line in textFile:
if (line.find('<s>')!=-1):
old = None
for line2 in textFile:
if (line2.find('</s>')!=-1):
break
else:
line2=line2.strip()
if line2 not in string.punctuation:
if old != None:
if old not in biGramDict:
biGramDict[old] = {}
if line2 not in biGramDict[old]:
biGramDict[old][line2] = 0
biGramDict[old][line2]+=1
old=line2

textFile.close()

print "going to pickle..."
pickle.dump(biGramDict, biGramDictFile,2)

print "pickle done. now load it..."

biGramDictFile.close()
biGramDictFile = open(str(sys.argv[2]), 'r')

newBiGramDict = pickle.load(biGramDictFile)

提前致谢。

编辑
对于任何感兴趣的人,我将简要解释一下这个程序的作用。假设您的文件格式大致如下:

<s>
Hello
,
World
!
</s>
<s>
Hello
,
munde
!
</s>
<s>
World
domination
.
</s>
<s>
Total
World
domination
!
</s>
  • <s>是句子分隔符。
  • 每行一个词。

生成一个 biGramDictionary 供以后使用。
像这样:

{
"Hello": {"World": 1, "munde": 1},
"World": {"domination": 2},
"Total": {"World": 1},
}

希望对您有所帮助。现在策略改为使用 mysql,因为 sqlite 无法正常工作(可能是因为大小)

最佳答案

Pickle 仅用于编写完整(小)对象。您的词典有点大,甚至无法保存在内存中,您最好改用数据库,这样您就可以一个接一个地存储和检索条目,而不是一次全部存储和检索。

您可以从 Python 使用的一些良好且易于集成的单文件数据库格式是 SQLiteDBM variants 之一.最后一个就像一本字典(即您可以读取和写入键/值对)但使用磁盘作为存储而不是 1.2 GB 的内存。

关于python - 使用 pickle 将巨大的二元字典保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246505/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com