【问题标题】:How to parse file with square brackets?如何解析带方括号的文件?
【发布时间】:2021-02-04 21:49:29
【问题描述】:

我有一个这样的数据文件:


[TOP]
Name=                 1
Plic=                 11
Glab=                 5487
Gendr=                2261
Mars=                 0
[ENDTOP]
[TOP]
Name=                 2
Plic=                 13
Glab=                 5556
Gendr=                2321
Mars=                 E
[ENDTOP]
[TOP]
Name=                 2
Plic=                 55
Glab=                 4012
Gendr=                3758
Mars=                 2
[ENDTOP]

我需要用 python3 将其解析为带有标题的 csv 文件:

Name;Plic;Glab;Gendr;Mars
1;11;5487;2261;0
2;13;5556;2321;E
2;55;4012;3758;2

但我坚持下去;我尝试使用 dict 但它只保留最后一个键:

for line in f.readlines():
        line = ligne.split('=')
        if len(line) == 2:
            table[line[0].strip()]= line[1].strip()

有人可以帮我实现吗?

【问题讨论】:

  • 这几乎看起来像一个 INI 文件。对其格式进行一些小的更改(因此它没有重复的部分/键,例如,有一个带有逗号分隔值的 name 键,或者具有唯一的部分名称,如 [section1]...[section2]),您可以使用标准库 configparser模块
  • 无论如何,dict 每个键只存储一个值。如果你想要多个值,你需要使用列表作为值,然后追加

标签: python-3.x parsing brackets


【解决方案1】:

这是一种非常简单的文件格式。此代码将文件解析为字典列表。从那里保存到 csv 应该很容易。

all_data = []
for line in f.readlines():
    if line.strip() == "[TOP]":
        # Start - create empty dictionary
        line_data = {}
    elif line.strip() == "[ENDTOP]":
        # End - save dictionary to list
        all_data.append(line_data)
    else:
        # Data - save to dictionary
        data = line.split('=')
        if len(data) == 2:
            line_data[data[0]] = data[1].strip()

生产:

[
{'Name': '1', 'Plic': '11', 'Glab': '5487', 'Gendr': '2261', 'Mars': '0'},
{'Name': '2', 'Plic': '13', 'Glab': '5556', 'Gendr': '2321', 'Mars': 'E'},
{'Name': '2', 'Plic': '55', 'Glab': '4012', 'Gendr': '3758', 'Mars': '2'}
]

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多