首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此文本文件解析为字典?

如何将此文本文件解析为字典?
EN

Stack Overflow用户
提问于 2017-10-12 03:59:54
回答 2查看 47关注 0票数 0

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

这座城市是西海岸的city1。

(一些与我无关的行)

.

冬天的温度是15度。

.

白天是5个小时。

……

这座城市是西海岸的city2。

……该模式重复出现。

我使用了line.startswith(),并通过连接如下所示的值来生成输出行:

对于文件中的行:

代码语言:javascript
复制
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 ....}

你能帮帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2017-10-12 04:08:00

代码语言:javascript
复制
dict = {}
if line.startswith('city'):
    current_city = line[8:12]
    dict[current_city] = []

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-10-12 04:09:55

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46696544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档