2015-03-25 31 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