2015-07-19 43 views
0
import pickle 
def create_dict(): 



    final_image_dict = {} 
    f_name = "./images/image_dict.txt" 

    handle = open(f_name, encoding = 'utf-8') 
    for line in handle: 
     if line.startswith(" ") : continue 
     terms = line.split(": ") 
     term = terms[0] 
     dict_tuple = terms[1].split(",") 
     caption = dict_tuple[0] 
     image = dict_tuple[1] 

     final_image_dict[term] = final_image_dict.get(term, dict_tuple) 


    with open("./images/final_image_dict.txt", "wb") as image_infile: 
     pickle.dump(final_image_dict, image_infile) 

我想用上面的函数从下面的文本文件中创建一个字典格式的key:(caption,image)格式:Python从文本文件中形成一个字典,值为一个元组

addugliare: (Coil a rope = Avvolgere a spire una cima,addugliare.gif), 
admiral: (classic anchor= ancora classico,admiral.gif), 
aft: (verso la poppa, aft.gif), 
alberatura: (mastage,alberatura.gif), 
albero: (mast = albero, albero.gif), 
ancore: (anchors, anchore.gif), 
andatu: (tacks, andatu.gif), 
armi: (sailing craft, armi.gif), 
bearing: (rilevamento , bearing.gif), etc 

我的问题是在创建值的元组。 以上给出了{'mooring': [' (ormeggio', ' mooring.gif)', '\n'], 'knot(speed)': [' (nodo(velocità)', ' knot.gif)', '\n'], 'addugliare': [' (Coil a rope = Avvolgere a spire una cima', 'addugliare.gif)',而不是'mooring': ('ormeggio','mooring.gif')这是我想要的格式。有人可以请帮忙。我也曾尝试(字幕,图像),这似乎是一个元组的元组不为我工作,要么

+0

你必须给文件'image_dict.txt'你正在尝试读取别人帮你。 –

+0

非常感谢您的回复。我从哪里写下“以下列格式的文本文件”,直接从我的问题中显示的格式(不包括etc)直接从image_dict.txt中提取出来 – user1478335

+0

这让我觉得,从你的角度来看,问题可能与文本中的括号有关。将删除它们并再试一次。我多愚蠢! – user1478335

回答

1

也许这样的事情(修改忽略空行和尾随空格):

def extractTuple(s): 
    s = s.strip() 
    n = len(s) 
    p = s[1:n-1].split(',') 
    return (p[0].strip(),p[1].strip()) 

def dictFromFile(fname): 
    f = open(fname) 
    lines = f.read().split('\n') 
    f.close() 
    d = {} 
    for line in lines: 
     line = line.strip() 
     if line.endswith(','): 
      line = line[:len(line)-1] 
      k,v = line.split(':') 
      d[k] = extractTuple(v) 
    return d 

与您的数据。例如:

>>> d = dictFromFile("test.txt") 
>>> for k in d: print(k,':',d[k]) 

admiral : ('classic anchor= ancora classico', 'admiral.gif') 
armi : ('sailing craft', 'armi.gif') 
addugliare : ('Coil a rope = Avvolgere a spire una cima', 'addugliare.gif') 
aft : ('verso la poppa', 'aft.gif') 
andatu : ('tacks', 'andatu.gif') 
alberatura : ('mastage', 'alberatura.gif') 
albero : ('mast = albero', 'albero.gif') 
ancore : ('anchors', 'anchore.gif') 
bearing : ('rilevamento', 'bearing.gif') 
相关问题