2013-08-06 71 views
0

我試圖通過從文本文件中配對兩行和兩行來將鍵值對添加到字典中。爲什麼這不起作用?Python:解壓縮(字典)的值太多

newdata = {} 
os.chdir("//GOLLUM//tbg2//tbg2//forritGB") 
f = open(filename) 
for line1, line2 in f.readlines(): 
    newdata[line1] = line2 

編輯:我得到的錯誤是

ValueError: too many values to unpack 

回答

0

您正在閱讀的所有線路,並指派第一行(序列)兩個變量。這僅適用於第一行由2個字符組成的情況。改爲使用該文件作爲迭代器:

newdata = {} 
os.chdir("//GOLLUM//tbg2//tbg2//forritGB") 
with open(filename) as f: 
    for line1 in f: 
     newdata[line1.strip()] = next(f, '').strip() 

這裏next()從文件中讀取下一行。

另一種方法是使用一個成對配方:

from itertools import izip_longest 

def pairwise(iterable): 
    return izip_longest(*([iter(iterable)] * 2), '') 

newdata = {} 
os.chdir("//GOLLUM//tbg2//tbg2//forritGB") 
with open(filename) as f: 
    for line1, line2 in pairwise(f): 
     newdata[line1.strip()] = line2.strip() 

注意str.strip()呼叫,以去除任何多餘的空白(包括在每行末尾的換行符)。

0
newdata = {} 
os.chdir("//GOLLUM//tbg2//tbg2//forritGB") 
with open(filename) as f: 
    for line1, line2 in zip(*[iter(f)]*2): 
     newdata[line1] = line2 

os.chdir("//GOLLUM//tbg2//tbg2//forritGB") 
with open(filename) as f: 
    newdata = dict(zip(*[iter(f)]*2)) 
+2

爲什麼讀取整個文件到內存? '.readlines()'在這裏是一個內存宏,只需直接使用'f' *並使用緩衝區讀取行。 –

+0

沒有想到這一點。謝謝! – RussW

相關問題