如何从文件创建字典?

时间:2012-07-17 15:42:48

标签: python dictionary python-2.7

我想创建一个包含文件值的字典。

问题是它必须逐行读取才能添加到字典中,因为我认为我没有足够的内存来加载要附加到字典的所有信息。

键可以是默认值,但值将是从文件中的每一行中选择的值。该文件不是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

3 个答案:

答案 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的好处是,当您完成或发生异常时,文件会自动关闭。

-

注意,原帖不包含任何代码,现在似乎已经合并了此代码的副本,以帮助进一步解释问题。