使用 Python 将数据从 .TXT 文件转换为 YAML 格式?

问题描述 投票:0回答:1

我有一个巨大的文件,其中包含如下所示的数据:

    H|Column1|Column2|Column3|
    T|2022-07-01|00001|TEST 1|
    T|2022-07-01|00002|TEST 2|
    F | Record count |    2| | 

如何通过 Python 将以下内容创建为 YAML 格式?

我对此很陌生,所以如果有人能为我提供一个例子来完成上述任务,那就太好了。

它应该看起来像这样:

H: T
Column1: 2022-07-01
Column2: 00001
Column3: TEST 1
-
 H: T
Column1: 2022-07-01
Column2: 00002
Column3: TEST 2
python yaml
1个回答
0
投票

您可以使用

csv
PyYAML
库导入“|”分隔的值,然后将它们转储到 YAML 中。

CSV阅读器(DictReader和阅读器)可以使用任何一个字符作为分隔符。它可以是逗号、制表符或输入数据所具有的字符、竖线

|

DictReader
将 CSV/TSV 的每一行读取到字典对象中,其中键是标题中指定的列名称。输入文件中有一个空字段(末尾的
|
),可以将其删除。字段值中可能不需要存在一些前导/尾随空格,可以将其删除。

有了字典对象,就可以生成YAML。 PyYAML 可以将字典流转储到一个 YAML 输出中。因此,如果它是一个巨大的文件,您可以读取输入文件,对其进行处理并将输出逐行流式传输到输出文件。

import csv
import io
import yaml


input_data = '''    H|Column1|Column2|Column3|
    T|2022-07-01|00001|TEST 1|
    T|2022-07-01|00002|TEST 2|
    F | Record count |    2| |
'''

def read_tsv(input_data):
    with io.StringIO(input_data) as f:
        cr = csv.DictReader(f, delimiter='|', skipinitialspace=True)
        for row in cr:
            del row['']
            for key, value in row.items():
                row[key] = value.strip()
            yield row

print(yaml.dump_all(read_tsv(input_data)))

输出如下所示:

Column1: '2022-07-01'
Column2: '00001'
Column3: TEST 1
H: T
---
Column1: '2022-07-01'
Column2: '00002'
Column3: TEST 2
H: T
---
Column1: Record count
Column2: '2'
Column3: ''
H: F

© www.soinside.com 2019 - 2024. All rights reserved.