2014-04-16 44 views

回答

1

的想法是遍歷文件的行,嘗試解析行成datetime通過strptime() - 如果成功的話,記得日期的年份,如果不是 - 通過regular expression解析線和寫入data字典:

from datetime import datetime 
import re 


data = {} 
pattern = re.compile('(\w+)\s+(\d+)\s+(\w+\s\d+)\s+(\d+)') 
with open('input.txt') as f: 
    for line in f: 
     try: 
      year = datetime.strptime(line.strip(), '%Y-%m-%d').year 
     except ValueError: 
      item = pattern.match(line.strip()).groups() 
      data[str(year) + "_" + item[0]] = item[1:] 

print data 

打印:

{'2013_Jhon': ('21', 'Class 10', '78'), 
'2014_Arjun': ('22', 'Class 10', '60'), 
'2014_Anil': ('23', 'Class 09', '85')} 

確保你明白是怎麼回事。如果沒有 - 請隨時在評論中提問。

+0

謝謝......我明白了代碼!小的查詢,我怎樣才能將相同的值插入到字典中,但是如果沒有提到formart的日期,只需要一些字符串「Class Data-1」或Class Data -2!請幫幫我! – user3347570

+0

@ user3347570不能說沒有樣本輸入。也許,最好問一個單獨的線程/問題,謝謝。 – alecxe

0

這一個是我所能想象的最簡單的解決方案,如果你真的使用TSV文件格式(製表符分隔值):

PATH = r"C:\text.txt" 
reader = open(PATH, 'rb') 
result = {} 
for line in reader: 
    if line.count("\t") == 0: 
     year = line.split("-")[0] 
    else: 
     name, day, class_no, mark = line.split(TAB) 
     key = year + "_" + name 
     value = [day, class_no, mark] 
     result[key] = value 
reader.close() 

的「結果」字典是你問什麼:)

0

我不會爲你寫這篇文章,但它會幫助你走上一條道路。

如果你的文件的格式是要始終成爲

YYYY-MM-DD 
Name ## Class ## ## 

再下面是相當簡單的。

您可以執行以下操作,檢查該行是否包含'Class'。
如果它不包含(這意味着該行包含YYYY-MM-DD),那麼現在您有一個字典關鍵字前綴,並且可以在' - '上拆分來提取年份。 如果它包含類,那麼現在可以完成詞典前綴(YYYY_Name)並將其餘值以d [「YYYY_Name」]作爲鍵分配給列表。

相關問題