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

Posted

技术标签:

【中文标题】使用 python 将 CSV 转换为所需格式的 JSON【英文标题】:Convert CSV to JSON in desired format using python 【发布时间】:2022-01-19 20:47:31 【问题描述】:

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

输入:

Reference mcc Value currency
abcd1234 5300 134.09 USD
abcd1235 5411 38.48 USD

使用的代码:

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) + '')

电流输出

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

期望的输出


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

【问题讨论】:

试试group = "cardTransactions" : group 【参考方案1】:

看起来您只需要将所有内容附加到“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 ...)

【讨论】:

【参考方案2】:

您想要的输出不允许在给定交易中使用多种价值/货币,因此您根本不需要使用 groupby。

过程可能是这样的:

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

print(json.dumps(data, indent = 3))

【讨论】:

非常感谢您的见解,我将在今天晚些时候尝试,并告知它是否有效。 :)

以上是关于使用 python 将 CSV 转换为所需格式的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何将 python 字典转换为所需的格式

如何查询/将数据转换为所需的格式

将数据帧转换为所需的字典格式

我应该如何在 Spring Boot 中配置 httpMessageConverters 以将消息转换为所需的格式?

CSV 文件格式

如何将熊猫系列转换为所需的 JSON 格式?