python - 将csv转换为json多文档?
问题描述
我使用 Python 有以下两个要求:
- 将 csv 转换为多文档 json。
- 忽略“”或空对象。
提到了代码和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"
}
]
}
有人可以帮助我实现预期的输出吗?
解决方案
使用全局
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)
你得到 [{},{}] 因为你将字典列表写入文件
推荐阅读
- excel - 在另一个宏中运行特定代码块的宏
- java - 通过休息模板交换解析响应
- .htaccess - 通过 htaccess 中的浏览器语言重定向,但只能从外部 url
- html - 动画 z-index
- objective-c - Xcode tvOS - 错误:您无权将文件“fileName.txt”保存在“Documents”文件夹中
- javascript - 根据数组的属性和组位对数组进行功能排序
- c# - WPF 中连接字符串的安全文本输入
- html - 角度占位符图像和文本
- python - 有没有比使用 python-docx 从大量非结构化 MS Word 文档中提取文本块更好的方法?
- postgresql - 如果 case-when-then-else 子句给出 ERROR: more than one row returned by a subquery used as an expression。在PostgreSQL中