我有一个巨大的文件,其中包含如下所示的数据:
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
您可以使用
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