免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1483 | 回复: 4
打印 上一主题 下一主题

这个csv如何转换为特定格式的json [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-28 11:05 |只看该作者 |倒序浏览
导出一个csv文件(tst.csv)格式如下(仅列举2行,此文件数据量大):
ORGNUMBER,ORGPATH,ORGNAME,SUBNODE,PNAME,GSHORTNAME,TDATE,SORGID
131025,0015000000/0015013737/,在册不在岗人员,0,分公司内部退养人员,内部退养人员,2015-11-02 00:00:36,[00150000000,0015013737]
52106532,0350000000/0065513737/,工程技术一分公司,1,公司工程技术公司工程技术一分公司机关,机关,2013-12-31 00:01:32,[0350000000,0065513737]

想转换为json格式,但是有些格式需要改变,主要是TDATE和SORGID列的类型变化
[{"ORGNUMBER":"131025","ORGPATH":"0015000000/0015013737/","ORGNAME":"在册不在岗人员","SUBNODE":"0","PNAME":"分公司内部退养人员","GSHORTNAME":"内部退养人员","TDATE":{"$date":"2015-11-02T00:00:36Z"},"SORGID":["00150000000","0015013737"]},
{"ORGNUMBER":"52106532","ORGPATH":"0350000000/0065513737/","ORGNAME":"工程技术一分公司","SUBNODE":"1","PNAME":"公司工程技术公司工程技术一分公司机关","GSHORTNAME":"机关","TDATE":{"$date":"2013-12-31T00:01:32Z"},"SORGID":["0350000000","0065513737"]}]

我在用python处理,但是因为初学,写的不顺利,请大家个点建议,谢谢!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-09-28 12:54 |只看该作者
回复 1# hope1234567hope

但是因为初学,写的不顺利,请大家个点建议,


你得把你的代码贴出来大家才能给建议呀

论坛徽章:
0
3 [报告]
发表于 2016-09-28 13:06 |只看该作者
回复 2# MMMIX
没有写出来,都是网上查的调用import json的一些例子,看例子怎么写的,我的这个我还没有开始写。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2016-09-28 14:55 |只看该作者
回复 3# hope1234567hope

我的这个我还没有开始写。


那就先写呗

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
5 [报告]
发表于 2016-09-28 17:22 |只看该作者
  1. #!python

  2. import json
  3. import sys
  4. import os
  5. import re
  6. import logging

  7. class UnicodeEncode:
  8.         def __dict_unicode(self,val):
  9.                 newdict =dict()
  10.                 for k in val.keys():
  11.                         newk = self.__encode_unicode(k)
  12.                         newv = self.__encode_unicode(val[k])
  13.                         newdict[newk] = newv
  14.                 return newdict

  15.         def __list_unicode(self,val):
  16.                 newlist = []
  17.                 for k in val:
  18.                         newk = self.__encode_unicode(k)
  19.                         newlist.append(newk)
  20.                 return newlist

  21.         def __encode_unicode(self,val):
  22.                 retval = val

  23.                 if sys.version[0]=='2' and ( not isinstance(val,unicode) and isinstance(val,str)):
  24.                         retval = unicode(val,'utf-8')
  25.                 elif isinstance(val,dict):
  26.                         retval = self.__dict_unicode(val)
  27.                 elif isinstance(val,list):
  28.                         retval = self.__list_unicode(val)
  29.                 return retval

  30.         def __init__(self,val):
  31.                 self.__val = self.__encode_unicode(val)
  32.                 return

  33.         def __str__(self):
  34.                 return self.__val

  35.         def __repr__(self):
  36.                 return self.__val
  37.         def get_val(self):
  38.                 return self.__val

  39. def cvs_to_json(infile=None,outfile=None):
  40.         fin = sys.stdin
  41.         fout =sys.stdout
  42.         if infile :
  43.                 fin = open(infile,'r+')
  44.         if outfile :
  45.                 fout = open(outfile,'w+')

  46.         cnt = 0
  47.         jsonres = []
  48.         jsonkeys = []
  49.         fout.write('[')
  50.         for l in fin:
  51.                 cnt += 1
  52.                 l = l.rstrip('\r\n')               
  53.                 if cnt == 1:
  54.                         sarr = re.split(',',l)
  55.                         for k in sarr:
  56.                                 jsonkeys.append(UnicodeEncode(k).get_val())
  57.                                 #jsonkeys.append(k)
  58.                         continue
  59.                 if cnt > 2:
  60.                         fout.write(',\n')
  61.                 sarr = re.split(',',l,len(jsonkeys))
  62.                 d = dict()
  63.                 i = 0
  64.                 if len(sarr) > len(jsonkeys):
  65.                         mustlen = len(jsonkeys)
  66.                         partsarr = sarr[(mustlen-1):]
  67.                         sarr[(len(jsonkeys)-1)] = ','.join(partsarr)
  68.                         del sarr[-1]
  69.                 for k in jsonkeys:
  70.                         d[k] = UnicodeEncode(sarr[i]).get_val()
  71.                         i += 1
  72.                 fout.write(json.dumps(d,ensure_ascii=False).encode('utf-8'))
  73.         fout.write(']\n')
  74.         if fin != sys.stdin:
  75.                 fin.close()
  76.         fin = None
  77.         if fout != sys.stdout:
  78.                 fout.close()
  79.         fout = None
  80.         return

  81. def main():
  82.         loglvl = logging.DEBUG
  83.         logging.basicConfig(level=loglvl,format='%(asctime)s:%(filename)s:%(funcName)s:%(lineno)d\t%(message)s')
  84.         cvs_to_json(None,None)

  85. if __name__ == '__main__':
  86.         main()
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP