首页 > 解决方案 > python:将csv文件转换为json格式并尝试调用数据中没有另一列的列

问题描述

我有一个这样的 CSV 文件:

Promotion Code|Promotion Name|Coupon Code|Coupon Name
E00000002|Gift Free Coin||
||000420|new join $300
E000000001|VIP -10%|006969|new join $300

我需要的结果是这样的:

[{"New_column": [{"type": "promo_code", "description": "Gift Free Coin", "redeem": "false"}]}, {"New_column": [{"coupon_code": 000420, "type": "coupon_code", "description": "new join $300", "redeem": "false"}]},{"New_column":[{"type":"promo_code","description":"VIP -10%","redeem":"false"},{"type":"coupon","description":"new join $300","redeem":"false","coupon_code":006969}]

我试图这样做但仍然失败

这是我的代码:

import csv
import json
from os import sep

with open('tran_test.csv') as file:
    dict_input = csv.reader(file, delimiter='|')
    next(dict_input, None)
    output = []
    for line in dict_input:
        promotion_code = line[0]
        promotion_name = line[1]
        coupon_code = line[2]
        coupon_name = line[3]
        print(line)
        coupon = {}
        if coupon_code == '' and promotion_code !='':
            coupon['type'] = 'promo_code'
            coupon['description'] = promotion_name
            coupon['redeem'] = 'false'
        elif coupon_code != '' and promotion_code == '':
            coupon['coupon_code'] = coupon_code
            coupon['type'] = 'coupon_code'
            coupon['description'] = coupon_name
            coupon['redeem'] = 'false'
        # elif (coupon_code != '' and promotion_code != ''):
        # 
        else:
            None
        output_obj = {}
        output_obj['New_column'] = [coupon]
        output.append(output_obj)

print(json.dumps(output))

结果是:

[{"New_column": [{"type": "promo_code", "description": "Gift Free Coin", "redeem": "false"}]}, {"New_column": [{"coupon_code": "000420", "type": "coupon_code", "description": "new join $300", "redeem": "false"}]}, {"New_column": [{}]}]

我有一些问题

如果促销和优惠券不为空,我不知道如何构建“New_column”。并且优惠券代码必须是整数,但如果我将优惠券代码类型更改为整数,则前导零将被删除。但我需要保持前导零。

标签: pythonjson

解决方案


你可以负担得起一些重构

if coupon_code and promotion_code:
    # handle case for both not null
elif coupon_code:
    # handle case for coupon code not null and promo null
elif promotion_code:
    # handle case for promo code not null and coupon null
else:
   # both null

恕我直言,这更具可读性

在您的方法中,您没有首先检查两者都不是 null,这导致它进入第一个或第二个 if 条件。您应该先处理该案件,然后处理其余案件。


推荐阅读