python - 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”。并且优惠券代码必须是整数,但如果我将优惠券代码类型更改为整数,则前导零将被删除。但我需要保持前导零。
解决方案
你可以负担得起一些重构
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 条件。您应该先处理该案件,然后处理其余案件。
推荐阅读
- java - 如何在同一个类中调用接口方法?
- php - php Bangla unicode outpur 罗马文本
- python-3.x - 缺少必需的参数:input_tensor
- python - SVM 错误的输入形状
- ruby-on-rails - Rails 协会不触发 Postgres 查询并返回 Nil
- python-3.x - 由于长度不等,将 ['a', 'b'] 类型数组的列拆分为多列失败
- css - 线性渐变效果在另一个页面上不起作用 - 可能缺少 css 代码
- javascript - 我们如何确定客户是否通过手机查看我的网站?
- visual-studio-code - 奇怪的 HTML 格式更漂亮
- javascript - Ag-grid 在两个网格之间同步数据