首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中将文本文件转换为嵌套的json

在python中将文本文件转换为嵌套的json
EN

Stack Overflow用户
提问于 2018-06-16 05:41:51
回答 1查看 504关注 0票数 -1

我的数据如下所示。这是输入文件:

代码语言:javascript
复制
storeId,id,itemId,description
123,1,101,item_1
123,1,102,item_2
123,1,103,item_3
123,2,201,item_4
123,2,202,item_5

我想使用Python解析它,并编写JSON等效项,以便将信息重新写入以下格式的文件:

代码语言:javascript
复制
[{
    "storeId": 123,
    "itemType": [{
        "id": 1,
        "items": [{
            "itemId": 101,
            "description": "item_1"
        }, {
            "itemId": 102,
            "description": "item_2"
        }, {
            "itemId": 103,
            "description": "item_3"
        }]
    }, {
        "id": 2,
        "images": [{
            "itemId": 201,
            "description": "item_4"
        }, {
            "itemId": 202,
            "description": "item_5"
        }]
    }]
}]
    enter code here

我很困惑如何才能做到这一点。有人能帮帮我吗?我是python的新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 06:02:36

您可以使用itertools.groupby

代码语言:javascript
复制
import itertools, csv
data = [[int(b) if b.isdigit() else b for b in i] for i in csv.reader(open('filename.csv'))][1:]
headers = ['storeId', 'itemType', 'id', 'items', 'itemId', 'description']
def create_structure(d, headers = headers):
  c = [[a, list(b)] for a, b in itertools.groupby(sorted(d, key=lambda x:x[0]), key=lambda x:x[0])]
  return [{headers[0]:a, headers[1]:create_structure([i for _, *i in b], headers = headers[2:]) if len(headers[2:]) > 2 else [dict(zip(headers[2:], i)) for _, *i in b]} for a, b in c]

代码语言:javascript
复制
import json
print(json.dumps(create_structure(data), indent = 4))

输出:

代码语言:javascript
复制
[
  {
    "storeId": 123,
    "itemType": [
        {
            "id": 1,
            "items": [
                {
                    "itemId": 101,
                    "description": "item_1"
                },
                {
                    "itemId": 102,
                    "description": "item_2"
                },
                {
                    "itemId": 103,
                    "description": "item_3"
                }
            ]
        },
        {
            "id": 2,
            "items": [
                {
                    "itemId": 201,
                    "description": "item_4"
                },
                {
                    "itemId": 202,
                    "description": "item_5"
                }
            ]
        }
     ]
   }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50883008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档