2012-07-17 85 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 ...這將允許你透明序列化,而不是序列化之間轉換非常透明。