2012-07-17 55 views
0

我想用文件中的值创建一个字典。如何从文件创建字典?

的问题是,它必须由线读取线被添加到字典中,因为我不认为我有足够的内存中的所有信息加载附加到字典中。

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

这是我正在使用的代码,并且我设置为值的变量是我从中提取数据的文件行中的索引。当我尝试调用字典来打印值时,我似乎遇到了一个问题,但我认为这可能是我的语法问题,或者可能是我所做的任务。我希望这些值被添加到键,但键继续作为普通号码,如0-100

回答

1

这样听起来好像主要问题是读取文件中的行由行。要读取文件中的行由行,你可以这样做:

with open('data.txt') as inf: 
    for line in inf: 
     # do your rest of processing 

使用with的优点是,该文件是自动关闭,当你完成或发生异常。

-

注意,原来的帖子不包含任何代码,它现在似乎已经将这一代码的副本,以帮助进一步说明这个问题。

+0

一件事,增加值和键一本字典的时候,我将如何保持值保持默认,或者从0无穷去? – Ferdinand 2012-07-17 15:55:44

2

如果您没有足够的内存将整个字典一次存储在RAM中,请尝试使用anydbm,bsddb和/或gdbm。这些是类似字典的对象,它们将键值对保存在单个表中的keystring-valuestring数据库中。

可选,考虑: http://stromberg.dnsalias.org/~strombrg/cachedb.html ...这将允许你透明序列化,而不是序列化之间转换非常透明。