2012-05-15 71 views
0

我想寫一個函數,將我的文本文件變成一個字典與子集。爲顯示顯示我迄今已加載的文本文檔:Python - 加載文件 - 字典

101 
102 
103 
201, John Cleese, 5/5/12, 5/7/12 
202 
203, Eric Idle, 7/5/12, 8/7/12 
301 
302 
303 

函數的結果應該得到加載信息,並返回其爲:

[('101', None), ('102', None), ('103', None), 
('201', Guest(John Cleese, 05/05/12, 05/07/12)), ('202', None), 
('203', Guest(Eric Idle, 07/05/12, 08/07/12)), ('301', None), 
('302', None), ('303', None)] 

我一直很努力,但ISDIGIT無濟於事。儘管我設法讓最後一個房間(303)接近功能。

def load_rooms(self, filename): 
    fd = open(filename, 'rU') 
    self._rooms = {} 
    for i in fd: 
     i = i.rstrip() 
     print i 

    if i.isdigit(): 
     self._rooms[i] = None 
     print self._rooms 
    else: 
     print i 

顯示

101 
102 
103 
201, John Cleese, 5/5/12, 5/7/12 
202 
203, Eric Idle, 7/5/12, 8/7/12 
301 
302 
303 
{'303': None} 

哇哦,我只注意到了房間303顯示兩次...那麼我的問題是,如何將我的辦法加載文本文件?我是否必須確保所有的代碼都是格式化的,或者我可以只寫一個函數,將它變成帶有子集的字典?我對字典很新,所以一點幫助都會很棒。謝謝

+2

您是否知道'csv'模塊? –

+0

爲什麼用tkinter標記?我在這個問題上看不到與Tkinter有關的任何東西。 –

+0

@ Bryan Oakley抱歉,您的權利。我會嘗試刪除它。 –

回答

1
import re 

class Guest(object): 
    ... 

data = [] 
with open('data.txt') as f: 
    for line in f: 
    tok = re.split(r'\s*,\s*', line.strip()) 
    if len(tok) > 1: 
     guest = Guest(tok[1], tok[2], tok[3]) 
    else: 
     guest = None 
    data.append((tok[0], guest)) 

print(data) 

實施Guest類留給練習讀者。

+0

這是另一個功能嗎?或者這個代碼是否在load_file函數下?對不起,我只是不太確定把它放在哪裏,它甚至可以在Guest類下,但是我寫的函數屬於另一類。 –

+0

您可以將此代碼(不包括'Guest'類聲明和實現)放在任何需要它的地方。如果它位於不同的模塊中,請確保導入'Guest'類。 – dj18

0

我不知道,如果你需要的re模塊

試試這個

def load_file(filename): 
    text = open("data.txt").readlines() 
    rooms = {} 
    for line in text: 
     room_data = line.strip('\n').split(',') 
     if len(room_data) > 1: 
      #rooms[room_data[0]] = room_data[1:] 
      rooms[room_data[0]] = tuple(room_data[1:]) 
     else: 
      rooms[room_data[0]] = None 

    return rooms 

你提到的字典在您的標題,但您預期的結果是嵌套列表。

編輯

回答?

+0

顯示爲:{'201':['John Cleese','5/5/12','5/7/12'],'203':['Eric Idle','7/5/12' ,'8/7/12'],'202':無,'301':無,'302':無,'303':無,'102':無,'103':無,'101':無} –

+0

是{'KEY':Value,...}是一個字典[(key,value),(key,value)是一個像字典一樣使用的嵌套列表。 – corn3lius

+0

有沒有辦法讓顯示爲:{'key':(value)}而不是{'key':[value]}? –