2017-10-11 35 views
0

我使用以下格式解析大文本文件。如何将此文本文件解析为字典?

城市是西海岸的城市1。

(一些线,都与我无关)

......

温度在冬季15度。

.....

白天是5小时。

....

城市在西海岸城2。

....模式重复。

我已经使用line.startswith()和通过连接等中的值由outputline:

用于文件行:

if line.startswith('city'): 

    line1 = line[8:12] 

if line.startswith('temperature') 

    line2 = line[:] and so on. 

最后outputline = LINE1 + LINE2 + line3中

所以它为每个城市街区打印一个输出行。

但我知道这是一个丑陋的解决方案。我想要的是这样一本字典: {city1:[15,5],city2:[temperature,daytime] ....}

请问您可以帮忙吗?

+0

可能使用'split()'将单词放入列表中,然后索引该列表。但是你仍然需要检查该列表的第一个单词。 – roganjosh

回答

0
dict = {} 
if line.startswith('city'): 
    current_city = line[8:12] 
    dict[current_city] = [] 

从这里你只需要dict[current_city].append(temp)

循环通过识别模式,其中,城市类将重复输入。

+0

我能够根据这段代码解析出大量复杂的文本文件。谢谢。 – ana

0

您可以遍历文本文件的行寻找您的线索,然后将值添加到字典。每个城市的价值都存储在一个列表中,所以你最终会得到一个城市名称的城市属性列表。

cities = {} 
with open('file.txt', 'r') as f: 
    city = None 
    city_name = None 

    for line in f: 
     if line.startswith('city'): 
      if city is not None: 
       cities[city_name] = city 
      city = [] 
      city_name = line[8:12] 

     elif line.startswith('temperature'): 
      city.append(line[:]) 

     elif line.startswith('daytime'): 
      city.append(line[:]) 

     # etc. 

# Print the resulting city properties 
from pprint import pprint 
pprint(cities) 

你可能更愿意使用str.split(),而不是直接切片的值。你也可能对像regular expressions这样的东西感兴趣,这对解析这样的字符串更加强大。

+0

公平答案。它现在让我非常震惊,重读这个问题,OP的要求结构是不可能的。他们也有'白天'的关键,所以可能需要一个元组/列表。 – roganjosh

+0

感谢Zac的解决方案和编辑。我想要一本以城市作为关键字的字典,并且每个关键字都映射到温度,白天等值的列表。 – ana

+0

@ana我已更新我的答案以生成列表而不是字典。 –