首页 > 解决方案 > 将csv转换为json多文档?

问题描述

我使用 Python 有以下两个要求:

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

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

我的.csv

_id,riderDetails.0.category,riderDetails.0.code,riderDetails.1.category,riderDetails.1.code
1111,re,remg,er,error
2111,we,were,ty,

代码

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)

代码输出

[{
    "_id": "1111",
    "riderDetails": [
        {
            "category": "re",
            "code": "remg"
        },
        {
            "category": "er",
            "code": "error"
        }
    ]
},
{
    "_id": "2111",
    "riderDetails": [
        {
            "category": "we",
            "code": "were"
        },
        {
            "category": "",
            "code": ""
        }
    ]
}]

预期产出

{
    "_id": "1111",
    "riderDetails": [
        {
            "category": "re",
            "code": "remg"
        },
        {
            "category": "er",
            "code": "error"
        }
    ]
}
{
    "_id": "2111",
    "riderDetails": [
        {
            "category": "we",
            "code": "were"
        }
    ]
}

有人可以帮助我实现预期的输出吗?

标签: pythonjsoncsv

解决方案


使用全局

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)

你得到 [{},{}] 因为你将字典列表写入文件


推荐阅读