首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csv转换为json多文档?

将csv转换为json多文档?
EN

Stack Overflow用户
提问于 2019-12-11 08:19:27
回答 2查看 402关注 0票数 1

下面有两个使用Python的要求:

  1. 将csv转换为多文档json.
  2. 忽略“或空对象.

”。

同时提到了代码和csv。目前,我只获得json数组对象,但需要在多文档json中创建。

我的csv

代码语言:javascript
复制
_id,riderDetails.0.category,riderDetails.0.code,riderDetails.1.category,riderDetails.1.code
1111,re,remg,er,error
2111,we,were,ty,

代码语言:javascript
复制
import csv
import json
def make_record(row):
    return  { 
    "_id" : row["_id"], 
    "riderDetails" : [
        {            
            "category" : row["riderDetails.0.category"], 
            "code" : row["riderDetails.0.code"],
        },
        {            
            "category" : row["riderDetails.1.category"] ,
            "code" : row["riderDetails.1.code"],
        }
    ]
}  


with open('N:/Exide/Mongo/rr22.csv', 'r', newline='') as csvfile:
     reader = csv.DictReader(csvfile, delimiter=',')

     with open('N:/Exide/Mongo/mm22.json', 'w') as jsonfile:       
       out = json.dumps([make_record(row) for row in reader])
       jsonfile.write(out)

码输出

代码语言:javascript
复制
[{
    "_id": "1111",
    "riderDetails": [
        {
            "category": "re",
            "code": "remg"
        },
        {
            "category": "er",
            "code": "error"
        }
    ]
},
{
    "_id": "2111",
    "riderDetails": [
        {
            "category": "we",
            "code": "were"
        },
        {
            "category": "",
            "code": ""
        }
    ]
}]

预期输出

代码语言:javascript
复制
{
    "_id": "1111",
    "riderDetails": [
        {
            "category": "re",
            "code": "remg"
        },
        {
            "category": "er",
            "code": "error"
        }
    ]
}
{
    "_id": "2111",
    "riderDetails": [
        {
            "category": "we",
            "code": "were"
        }
    ]
}

有人能帮我实现预期的产出吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-11 09:52:24

问题中的my 文件中的数据不会产生所显示的输出,但这可能是由于一个小的投递错误造成的,所以我将忽略它。

还请注意,您正在生成的文件不是一个严格有效的JSON格式文件--也许这就是术语“多文档json"…的意思

无论如何,您可以通过修改make_record()函数来完成所需的任务,这样它就可以“清理”记录,并在它返回之前删除任何空/缺失的值。

这分两步完成。

values.

  • Lastly,
  1. 首先从riderDetails中的每个细节开始,然后删除所有有空riderDetails的键,再次遍历每个riderDetails并删除完全为空的任何细节(因为第一步删除了所有内容,或者在正在读取的csv文件中没有提供任何内容)。

代码语言:javascript
复制
import csv
import json

csv_inp = 'rr22.csv'
json_outp = 'mm22.json'

def make_record(row):
    # Reformat data is row.
    record = {
        "_id": row["_id"],
        "riderDetails": [
            {
                "category": row["riderDetails.0.category"],
                "code": row["riderDetails.0.code"],
            },
            {
                "category": row["riderDetails.1.category"],
                "code": row["riderDetails.1.code"],
            }
        ]
    }

    # Remove empty values from each riderDetail.
    record['riderDetails'] = [{key: value for key, value in riderDetail.items() if value}
                                for riderDetail in record['riderDetails']]

    # Remove completely empty riderDetails.
    record['riderDetails'] = [riderDetail for riderDetail in record['riderDetails']
                                if riderDetail]
    return record

with open(csv_inp, 'r', newline='') as csvfile, \
     open(json_outp, 'w') as jsonfile:

    for row in csv.DictReader(csvfile, delimiter=','):
        jsonfile.write(json.dumps(make_record(row), indent=4) + '\n')
#        jsonfile.write(json.dumps(make_record(row)) + '\n')
票数 0
EN

Stack Overflow用户

发布于 2019-12-11 08:31:59

使用球体

代码语言:javascript
复制
import glob, os

pt = 'N:/Exide/Mongo/*.csv'

for file in glob.glob(pt):
    get_name = file.split("/")[-1].replace(".csv",".json")
    with open(file , 'r', newline='') as csvfile:
        reader = csv.DictReader(csvfile, delimiter=',')
        out = [make_record(row) for row in reader]

    saving_path = os.path.join('N:/Exide/Mongo/',get_name)
    with open(saving_path , 'w') as jsonfile:       
        json.dump(out , jsonfile)

你得到{},{}因为你把字典的列表写进文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59281436

复制
相关文章

相似问题

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