2015-03-25 30 views
0

我必須將Python中的文本文件讀入字典中,我嘗試了幾個選項,但無法使其工作。文本文件的 的格式如下:Python - 將文本文件轉換爲字典

Shop: someshop 
Schedule: from 8:00 to 18:00 
Day: 11:11:2011 
Items Sold: 456 
List of purchases: 
(product, 123, 12:30)  
(product, 123, 12:30) 
(product, 123, 12:30) 

我也曾嘗試使用正則表達式,但我想不出來獲得採購清單的項目。

下面是一些代碼,我想:

d = {} 
with open("sometext.txt", "r") as f: 
    for line in f: 

     (key, val) = line.split(': ') 
     d[file] = (key,val) 
     print (val) 


print d 
+0

什麼是你期望的輸出? – 2015-03-25 11:58:37

+0

我必須得到的關鍵:值對成字典, – 2015-03-25 12:06:52

回答

1

你當時幾乎沒有;你應該使用key在詞典中的關鍵,不是file

(key, val) = line.split(': ') 
d[key] = val.rstrip('\n') 

我添加了一個str.strip()通話;大概你不需要在每行結尾存儲換行符。

但是,您需要單獨分析購買列表,因爲這些不適合您的key: value模式。我在這裏假設它是最後條目列表:

d = {} 
with open("sometext.txt", "r") as f: 
    for line in f: 
     if line.startswith('List of purchases'): 
      purchases = d['List of purchases'] = [] 
      for line in f: 
       info = line.strip('() \n').split(', ') 
       purchases.append(info) 
      break 
     key, val = line.split(': ') 
     d[key] = val.rstrip('\n') 

當你閱讀List of purchases線這將讀取文件的剩餘部分爲一個單獨的列表。

演示:

>>> from io import StringIO 
>>> sample = '''\ 
... Shop: someshop 
... Schedule: from 8:00 to 18:00 
... Day: 11:11:2011 
... Items Sold: 456 
... List of purchases: 
... (product, 123, 12:30)  
... (product, 123, 12:30) 
... (product, 123, 12:30) 
... ''' 
>>> d = {} 
>>> with StringIO(sample) as f: 
...  for line in f: 
...   if line.startswith('List of purchases'): 
...    purchases = d['List of purchases'] = [] 
...    for line in f: 
...     info = line.strip('()\n').split(', ') 
...     purchases.append(info) 
...    break 
...   key, val = line.split(': ') 
...   d[key] = val.rstrip('\n') 
... 
>>> d 
{'Schedule': 'from 8:00 to 18:00 ', 'List of purchases': [['product', '123', '12:30'], ['product', '123', '12:30'], ['product', '123', '12:30']], 'Day': '11:11:2011 ', 'Shop': 'someshop ', 'Items Sold': '456 '} 
>>> from pprint import pprint 
>>> pprint(d) 
{'Day': '11:11:2011 ', 
'Items Sold': '456 ', 
'List of purchases': [['product', '123', '12:30'], 
         ['product', '123', '12:30'], 
         ['product', '123', '12:30']], 
'Schedule': 'from 8:00 to 18:00 ', 
'Shop': 'someshop '} 
+0

謝謝你的答案,但我仍然得到這個錯誤代碼「ValueError:需要多個值解壓縮」,當它到達最後一個鍵我不能讀取最後一行中的值。 – 2015-03-25 12:05:12

+0

@威廉史密斯:事實上,我已經解決了這個問題。 :-) – 2015-03-25 12:06:02

+0

非常感謝。豎起大拇指給你。 – 2015-03-25 12:16:28