我正在解析一个大的文本文件,格式如下。
这座城市是西海岸的city1。
(一些与我无关的行)
.
冬天的温度是15度。
.
白天是5个小时。
……
这座城市是西海岸的city2。
……该模式重复出现。
我使用了line.startswith(),并通过连接如下所示的值来生成输出行:
对于文件中的行:
if line.startswith('city'):
line1 = line[8:12]
if line.startswith('temperature')
line2 = line[:] and so on.最终输出行= line1 +line2+line3
因此,它为每个城市街区打印一条输出行。
但我知道这是一个丑陋的解决方案。我想要的是这样的字典:{city1:15,5,city2:temperature,daytime ....}
你能帮帮忙吗?
发布于 2017-10-12 04:08:00
dict = {}
if line.startswith('city'):
current_city = line[8:12]
dict[current_city] = []从这里你只需要dict[current_city].append(temp),等等。
通过识别重复城市类别的模式来循环您的输入。
发布于 2017-10-12 04:09:55
您可以遍历文本文件的各行以查找提示,然后将值添加到字典中。每个城市的值都存储在一个列表中,因此您最终将得到一个以城市名称为关键字的城市属性列表。
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之类的东西感兴趣,它对于解析这样的字符串要强大得多。
https://stackoverflow.com/questions/46696544
复制相似问题