【问题标题】:How can I parse this text file into a dictionary?如何将此文本文件解析为字典?
【发布时间】:2017-10-12 22:47:33
【问题描述】:

我正在解析一个格式如下的大文本文件。

city 是西海岸的 city1。

(一些与我无关的行)

......

冬天的温度是15度。

.....

白天是 5 小时。

....

city 是西海岸的 city2。

....模式重复。

我使用了 line.startswith() 并通过连接以下值来制作输出线:

文件中的行:

if line.startswith('city'):

   line1 = line[8:12]

if line.startswith('temperature')

   line2 = line[:] and so on.

最终输出line = line1 +line2+line3

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

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

你能帮忙吗?

【问题讨论】:

  • 可能使用split() 将单词放入列表中,然后对该列表进行索引。但是您仍然需要检查该列表的第一个单词。

标签: python dictionary


【解决方案1】:
dict = {}
if line.startswith('city'):
    current_city = line[8:12]
    dict[current_city] = []

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

通过识别城市类别重复的模式来循环输入。

【讨论】:

  • 我能够根据这段代码解析一个复杂的大文本文件。谢谢。
【解决方案2】:

您可以遍历文本文件的各行以查找提示,然后将值添加到字典中。每个城市的值都存储在一个列表中,因此您最终会得到一个由城市名称键入的城市属性列表。

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 之类的东西感兴趣,它们在解析此类字符串时功能更强大。

【讨论】:

  • 公平的答案。现在让我震惊的是,重读这个问题,OP 要求的结构是不可能的。他们也有 daytime 对键所以可能需要一个元组/列表。
  • 感谢 Zac 的解决方案和编辑。我想要一个以城市为键的字典,每个键都映射到温度、白天等值的列表。
  • @ana 我已经更新了我的答案以生成一个列表而不是字典。
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 2018-04-02
  • 2017-07-21
  • 2018-10-12
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多