有几个yaml文件:
文件1
phone:
os: android
size:
length: 80
height: 10
weight: 40
model: SE-35
price: 20000
文件2
phone:
os: apple
model: Iphone 15
price: 150000
color: gold
文件3
phone:
os: apple
model: Iphone 15
color: black
exist: absent
文件4
phone:
os: android
size:
length: 75
height: 8
weight: 36
camera:
front: 4 mp
back: 64 mp
zoom: 3
model: SE-35
price: 20000
它们需要以表格形式呈现,其中第一列是键,其余是值。
该表将如下所示:
| 电话 | 文件1 | 文件2 | 文件3 | 文件4 |
|---|---|---|---|---|
| 电话操作系统 | 安卓 | 苹果 | 苹果 | 安卓 |
| 手机.尺寸.长度 | 80 | 75 | ||
| 手机.尺寸.高度 | 10 | 8 | ||
| 手机.尺寸.重量 | 40 | 35 | ||
| 手机型号 | SE-35 | iPhone 15 | iPhone 15 | |
| 电话.价格 | 20000 | 150000 | 20000 | |
| 电话颜色 | 金子 | 黑色的 | ||
| 电话.存在 | 缺席的 | |||
| 手机.相机.前置 | 4 议员 | |||
| 电话.相机.返回 | 64 点 | |||
| 手机.相机.后退.缩放 | 3 |
其实这样的文件还有很多,我只是举了一些例子
我试图解析它们:这是代码:
import os
import yaml
import pandas as pd
# получаем данные из файла
def GetData(data, prefix):
if isinstance(data, dict):
for k, v in data.items():
yield from GetData(v, f'{prefix}/{k}')
else:
yield (prefix, data)
# находим все файлы в директории
def findYamlFiles(directory):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.yaml' or '.yml'):
with open(os.path.join(root, file), 'r') as f:
yaml_data = yaml.safe_load(f)
df = pd.DataFrame(GetData(yaml_data, ''), columns=['phone', 'rezults'])
path = "~/phones"
findYamlFiles(path)
总的来说,在 df 中我得到了一个完全解析的 yaml 文件,由两列组成,但我无法将所有 df 收集到一张表中。
如果全部
df具有相同的结构:结论:
结论:
结论:
结论:
pd.合并
pd.concat
一般来说,您可能可以只使用
json_normalize:资源:
您可以以不同的方式构建数据:
输出: