2015-03-18 78 views
0

我有下面的格式內容的csv文件:選擇合適的數據結構解析文件

CSE110, Mon, 1:00 PM, Fri, 1:00 PM 
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM 

它基本上課程名稱,然後它的時序。

什麼是解析和存儲這些數據的最佳數據結構?

我嘗試使用命名元組如下:

CourseTimes = namedtuple('CourseTimes', 'course_name, day, start_time ') 

可是一門課程可以在多天的時間,如圖爲cse114上述安排。這隻能在運行時決定。如何處理這個?

否則,我可以使用Dictionary或List嗎?

我正在嘗試解決一個計劃問題,將TA分配給課程。我可能必須比較時間來檢查未來是否有任何衝突

此外,爲了使事情複雜化,輸入文件還有其他數據以及我需要解析的數據。基本上以下是格式。

//Course times 
CSE110, Mon, 1:00 PM, Fri, 1:00 PM 
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM 
.... 

//Course recitation times 
CSE306, Mon, 2:30 PM 
CSE307, Fri, 4:00 PM 
... 

//class strength 
CSE101, 44, yes 
CSE101, 115, yes 
... 

我需要將所有這些存儲在獨立的數據結構中,我想。什麼可能是每個類別的正確註冊模式?

+1

您需要構建您的數據,以適應你要*做*與它。 – 2015-03-18 21:18:18

+1

正確的數據結構取決於您想要對數據執行的操作。如果你只是想打印數據,那麼你需要一個大字符串。如果您需要排序或計數或執行其他操作,那麼這些操作會通知您選擇的數據結構。 – unutbu 2015-03-18 21:18:22

+1

爲什麼不使用「字典」? – Kasramvd 2015-03-18 21:19:11

回答

2

開始注意到你的數據的幾件事情:

  1. 你有一些獨特的字符串(課程)
  2. 每門課程後,有一個數字串(類符合時代每週)

因此,你有一系列唯一的鍵,每個鍵都有一些值。

聽起來像是dictionary給我。

要將這些數據存入字典,請從reading the file開始。接下來,您可以使用regular expressions來選擇每個[day], [hour]:[minutes] [AM/PM]部分或普通的舊string.split()以逗號分隔線段。課程字符串是字典中的關鍵字,其餘行作爲元組或值列表。移到下一行。

1
{ 
    'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'], 
    'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']} 
} 

這種形式的字典。一門課程可以在同一天有多個插槽。

閱讀csv文件時,您爲課程和當天創建(如果它不存在)併爲其分配單個元素列表。如果課程和日期的值已經存在,您只需追加到現有列表。這意味着課程在同一天有多個時間點。

您不需要正則表達式來查找輸入行的類別。 您擁有的第一種和第二種類型(即,單日和多日)可以找到像

l = line.split(', ') 
try: 
    n = int(l[1]) # n = strength 
except: 
    #continue adding to dictionary since second element in the list is not an integer 
+0

聽起來不錯。此外,有什麼可以找到像這樣的模式正確的reg-ex模式?請檢查主帖子中的編輯。謝謝 – raghu 2015-03-18 21:54:28

+0

編輯它...... – hyades 2015-03-19 12:31:09