[英]argparse - group unknown fields in csv
我正在做一個csv到json的轉換,一切正常,問題是我的最后一個字段有時用逗號分隔值,並且解析器將其視為新列。
即:
key1 key2 key3 key4
val1 val2 val3 val4,val4.1,val4.2,val4.3
我得到這種json:
{key1: val1, key2: val2, key3:val3, key4:val4}
val4.1,val4.2,val4.3不存在。 適當的結果將是:
{key1: "val1", key2: "val2", key3: "val3", key4: "val4,val4.1,val4.2,val4.3"}
到目前為止,我的代碼:
#!/usr/bin/env python
"""Convert csv to json"""
import json
import argparse
def parse(filename):
with open(filename) as f:
csv = f.read().split('\r\n\r\n')[1]
keys = ['val1', 'val2', 'val3', 'val4']
for line in stations.split('\r\n')[1:]:
yield dict(zip(keys, [cell.strip() for cell in line.split(',')]))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('-i', default='dump.csv', help='csv input file')
parser.add_argument('-o', default='state/dump.json', help='json output file')
(opt, args) = parser.parse_args()
with open(opt.o, 'w+') as f:
rows = []
for row in parse(opt.i):
rows.append(row)
json.dump(rows, f, ensure_ascii=False)
答案實際上很簡單,只有一天的時間,所以我沒有立即想到它。 解決尋找者的問題是這樣的:
碼:
keys = ['val1', 'val2', 'val3', 'val4']
for line in csv.split('\r\n')[1:]:
current_line = line.split(',')
extras = len(current_line) - len(keys)
newString = ""
for i in range(len(keys), len(keys) + extras):
if(i+1 == len(keys) + extras):
newString += current_line[i]
else:
newString += current_line[i] + ","
list = line.split(',')
list[len(keys)-1] = probes
yield dict(zip(keys, [cell.strip() for cell in list]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.