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

4

3 回答 3

2

看看像“东京内阁”@ http://fallabs.com/tokyocabinet/这样的东西,它具有 Python 绑定并且相当有效。还有京都内阁,但许可有点限制。

另请查看之前的 S/O 帖子:Reliable and Effective key-value database for Linux?

于 2012-07-17T16:23:55.660 回答
2

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

或者,考虑: http ://stromberg.dnsalias.org/~strombrg/cachedb.html ...这将允许您在序列化和非序列化表示之间进行透明转换,非常透明。

于 2012-07-17T16:16:10.667 回答
1

所以听起来好像主要问题是逐行读取文件。要逐行读取文件,您可以这样做:

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

使用的好处with是当你完成或发生异常时,文件会自动为你关闭。

--

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

于 2012-07-17T15:44:23.243 回答