繁体   English   中英

使用 python 以所需格式将 CSV 转换为 JSON

[英]Convert CSV to JSON in desired format using python

我想从相应的输入中收集一些关于低于 output 的见解,我尝试了一些代码,但无法得到我想要的结果。 希望看到表格转换为理想的格式,因为我必须在后期使用巨大的 CSV。 任何输入都受到高度赞赏。

输入:

参考 微控制器 价值 货币
abcd1234 5300 134.09 美元
abcd1235 5411 38.48 美元

使用的代码:

from csv import DictReader
from itertools import groupby
from pprint import pprint
import json

with open('Test_bulk_transactions_data.csv') as csvfile:
    r = DictReader(csvfile, skipinitialspace=True)
    data = [dict(d) for d in r]

    group = []
    uniquekeys = []

    for k, g in groupby(data, lambda r: (r['reference'], r['mcc'])):
        group.append({
            "reference": k[0],
            "mcc": k[1],
            "amount": [{k:v for k, v in d.items() if k not in ['reference','mcc']} for d in list(g)]})
        uniquekeys.append(k)

print(json.dumps(group, indent = 3) + '}')

当前 Output

[
   {
      "reference": "abcd1234",
      "mcc": "5300",
      "amount": [
         {
            "value": "134.09",
            "currency": "USD"
         }
      ]
   },
   {
      "reference": "abcd1235",
      "mcc": "5411",
      "amount": [
         {
            "value": "38.48",
            "currency": "USD"
         }
      ]
   }
]}

所需 Output

{
  "cardTransactions": [
    {
      "reference": "abcd1234",
      "mcc": "5300",
      "amount": {
        "value": 134.09,
        "currency": "USD"
      }
    },
    {
      "reference": "abcd1235",
      "mcc": "5411",
      "amount": {
        "value": 38.48,
        "currency": "USD"
      }
    }
  ]
}

看起来您只需要将 append 的所有内容放入“cardTransactions”键,并且在创建时可以将值强制转换为浮点数。

"amount": [{k: float(v) for k, v in d.items() if k not in ['reference','mcc']} for d in list(g)]})
group = [] to group = defaultdict(list)
and group['cardTransactions'].append(... code as usual ...)

您想要的 output 将不允许在给定交易中使用多个金额/货币,因此您根本不需要使用 groupby。

该过程可以简明为:

data = { 'cardTransactions':
         [{'amount':{'value':d.pop('value'), 'currency':d.pop('currency')}, **d}]
           for d in r }

print(json.dumps(data, indent = 3) + '}')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM