2015-07-19 44 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') 
相關問題