使用 Python 进行 Excel 嵌套标题映射

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

我有一个带有嵌套标题的 Excel 文件:

enter image description here

阅读标题内容后,结果为:

header = [
    ['Order', 'Translation', '', '', '', '', 'Status', ''], 
    ['', 'Not available', 'Language', '', '', '', 'Packed', 'Delivered'], 
    ['', '', 'English', '', 'FR', 'ES', '', ''], 
    ['', '', 'US', 'UK', '', '', '', '']
]

现在我想获得这样的东西:


output = [
'Order',
'Translation.Not Available',
'Translation.Language.English.US',
'Translation.Language.English.UK',
'Translation.Language.FR',
'Translation.Language.ES',
'Status.Packed',
'Status.Delivered'
]

知道如何实现这个输出吗?也可以是JSON格式。谢谢!

{
    "Order": "",
    "Translation": {
        "Not Available": "",
        "Language": {
            "English": {
                "US": "",
                "UK": ""
            },
            "FR": "",
            "ES": ""
        }
    },
    "Status": {
        "Packed": "",
        "Delivered" : ""
    }
}
python excel nested
1个回答
0
投票

此时只能得到以下内容:

output = [
'Order', 
'Translation.Not available', 
'Translation.Language.English.US', 
'Translation.Language.English.UK', 
'FR', 
'ES', 
'Status.Packed', 
'Status.Delivered'
]

仍然无法获得“FR”和“ES”的正确路径。也许有人会发现代码逻辑的问题:

def flat_headers(header):
    flat_headers_list = ["" for _ in range(len(header[0]))]
    for i, row in enumerate(header):
        for j, col in enumerate(row):
            if not col:
                if i < len(header) - 1 and header[i + 1][j]:
                    if not flat_headers_list[j]:
                        if j > 0 and flat_headers_list[j - 1]:
                            flat_headers_list[j] = flat_headers_list[j - 1]
                    else:
                        flat_headers_list[j] = header[i + 1][j]
            else:
                if flat_headers_list[j]:
                    flat_headers_list[j] += "." + col
                else:
                    flat_headers_list[j] = col
    return flat_headers_list
© www.soinside.com 2019 - 2024. All rights reserved.