我想创建一个包含文件值的字典。
问题是它必须逐行读取才能添加到字典中,因为我认为我没有足够的内存来加载要附加到字典的所有信息。
键可以是默认值,但值将是从文件中的每一行中选择的值。该文件不是csv,但我总是分割线,以便我可以从中选择一个值。
import sys
def prod_check(dirname):
dict1 = {}
k = 0
with open('select_sha_sub_hashes.out') as inf:
for line in inf:
pline = line.split('|')
value = pline[3]
dict1[line] = dict1[k]
k += 1
print dict1
if __name__ =="__main__":
dirname=sys.argv[1]
prod_check(dirname)
这是我正在使用的代码,我设置为value的变量是我从中提取数据的文件行中的索引。当我尝试调用字典来打印值时,我似乎遇到了问题,但我认为这可能是我的语法中的问题,或者可能是我所做的任务。我希望将值添加到键中,但键保持为常规数字,如0-100
答案 0 :(得分:2)
如果没有足够的内存一次将整个字典存储在RAM中,请尝试anydbm,bsddb和/或gdbm。这些是类似字典的对象,它们将键值对保存在单表keystring-valuestring数据库中。
可选择考虑: http://stromberg.dnsalias.org/~strombrg/cachedb.html ...这将允许您透明地在序列化和非序列化表示之间进行透明转换。
答案 1 :(得分:2)
看看像“东京内阁”@ http://fallabs.com/tokyocabinet/这样的东西,它有Python绑定并且效率很高。还有京都内阁,但许可证有点限制。
另请查看此前的S / O帖子:Reliable and efficient key--value database for Linux?
答案 2 :(得分:1)
所以听起来好像主要问题是逐行读取文件。要逐行读取文件,您可以执行以下操作:
with open('data.txt') as inf:
for line in inf:
# do your rest of processing
使用with
的好处是,当您完成或发生异常时,文件会自动关闭。
-
注意,原帖不包含任何代码,现在似乎已经合并了此代码的副本,以帮助进一步解释问题。