python 将json导出成csv,

  python 将json导出成csv,

  1.脚本实现后台这个脚本的目的是对比之前代理脚本获得的实时数据,以便将预期数据转换成json数据!为自动数据比对铺平道路!

  原始数据csv中的数据格式如下:

  作为一个数据项,上图中圈出的部分将按以下格式排列:

  2.脚本源代码。脚本名为readDataToDic.py

  #编码=utf8

  导入csv

  导入日志记录

  作者:王锷

  数据:2017年7月12日

  该模块的主要功能:

  ReadDataToList():将csv格式的数据和数据项作为字典类型存储在列表中。

  GetAllServiceId():获取所有服务Id的列表。

  PrintListData():输出数据列表中的每一项数据。

  CreateDataDic():创建一个数据字典表,将serviceId作为键,将相同的数据项列表作为值。

  PrintDicData():输出数据字典中的每一项数据。

  logging . basic config(level=logging。调试,

  format= %(ASC time)s %(filename)s[line:%(line no)d]%(level name)s %(message)s ,

  datefmt=%a,%d %b %Y %H:%M:%S ,

  filename=readDate.log ,

  filemode=w )

  类GenExceptData(对象):

  def __init__(self):

  尝试:

  #将读取的数据存储在csv中

  self.mdbuffer=[]

  #打开csv文件并设置读取权限。

  CSV hand=open( 20170510174450 . CSV , r )

  #创建一个句柄来读取csv文件

  readcsv=csv.reader(csvHand)

  #将csv数据读入mdbuffer

  对于readcsv中的行:

  self.mdbuffer.append(行)

  #将数据作为字典类型。

  除了例外,e:

  logging.error(读取Excel错误: e )

  最后:

  #关闭csv文件

  csvHand.close()

  def readDataToList(self):

  尝试:

  #在数组末尾添加一个空行

  #这一行的作用是成功获取最后一个json数据。

  #在数组结束行添加一个空白字符

  endLine=[ for num in range(len(self . MD buffer[1]))if num=0]

  #在末尾添加带有空字符的endLine

  self.mdbuffer.append(endLine)

  #获取mdbuffer中的元素数

  rowNumber=len(self.mdbuffer)

  #设置当前行号

  currentrow=1

  #设置json数据的属性值

  propertyJson={}

  #阅读列表中的元素

  数据列表=[]

  尝试:

  对于范围中的行(1,rowNumber):

  #创建一个临时变量来访问循环的属性键值。

  温度={}

  #获取列表中的元素

  item=self.mdbuffer[row]

  #获取当前元素,它表示每个

  #事件开始的位置

  current item=self . MD buffer[current row]

  #获取服务Id并解码

  serviceId=currentItem[2]。解码(“gbk”)

  #获取属性并对其进行解码,并将解码后的值存储在propertyName中。

  propertyName=item[3]。解码(“gbk”)

  #获取属性值并解码,并将解码后的值存储在propertyValue中

  propertyValue=item[4]。解码(“gbk”)

  尝试:

  #确定隐藏事件是否等于serviceId。

  如果item[0]==currentItem[0]和item[2]==currentItem[2]:

  #将serviceId模式字典放入propertyJson

  property JSON[ service id ]=service id

  #将属性/值对放入临时字典

  temp[属性名]=属性值

  #调用字典的update函数,将temp中的键值成对放置

  #添加到propertyJson字典中

  propertyJson.update(临时)

  #使用continue,如果if条件为真,循环执行if语句模块。

  继续

  否则:

  #将行号设置为当前行

  currentrow=row

  #将当前属性解码为propertyName

  propertyName=currentItem[3]。解码(“gbk”)

  #将当前属性值解码为propertyName

  propertyValue=currentItem[4]。解码(“gbk”)

  #将serviceId模式字典放入propertyJson

  property JSON[ service id ]=service id

  #将属性/值对放入propertyJson字典中

  property JSON[属性名]=属性值

  # propertyjsonlist . append(property JSON)

  dataList.append(propertyJson)

  在此:

  propertyJson.clear()和propertyJson={}的区别:

  PropertyJson.clear()是删除字典的值。如果不创建引用,会改变字典本身的值;

  JSON={0}是创建一个新的引用,字典里的值不变;

  如果你想陈述自我。datadic.append (property JSON)成功执行并添加每个循环的值,

  需要propertyJson={}方法;

  如果使用propertyJson.clear(),只有propertyJson最后存储的值会添加到self.dataDic中

  propertyJson={}

  除了例外,e:

  logging.error(Get属性Json错误: e )

  #打印获取属性数据错误:,e

  除了例外,e:

  logging.error(获取日期错误: e )

  #打印获取日期错误:,e

  #返回数据列表

  返回数据列表

  除了例外,e:

  #把信息写入日志中

  logging.error(读取数据到(油)密度指示控制器(Density Indicating Controller的缩写)错误: e )

  #打印读取数据到(油)密度指示控制器(Density Indicating Controller的缩写)错误:,e

  def getAllServiceId(self):

  尝试:

  #调用readDataToList函数创建一个数据目录

  dataList=self.readDataToList()

  #把数据目录中的所有法业务类型放入表serList中

  serList=[item[serviceId],for item in dataList if item[ service id ]]

  #对serList中的数据去重,分为两步:

  #第一步把列表转换成集合:设置(serList)

  #第二步:把集合转换为list:list(set(serList))

  #集合和目录的区别:集合中的数据是唯一性,不存在相同部分

  serList=list(set(serList))

  #返回serList

  返回serList

  除了例外,e:

  logging.error(创建服务身份列表错误: e )

  #打印创建服务身份列表错误:" e

  #输出目录中的数据信息

  def printListData(自身):

  尝试:

  #调用readDataToList方法获取数据列表列表

  dataList=self.readDataToList()

  #对列表中的数据执行为循环

  #并输出类似与数据样式的数据

  对于数据列表中的项目:

  打印 {

  #输出键值对

  对于key,item.items()中的val:

  打印\t ,键,:,值,,

  打印 }

  #设置以#格式的分隔符

  打印 #*50

  除了例外,e:

  logging.error(输出列表数据错误: e )

  #打印输出列表数据错误:" e

  #创建一个数据字典

  def createDataDic(self):

  尝试:

  #定义个数据字典变量

  dataDic={}

  #调用函数readDataToList创建一个数据列表表

  dataList=self.readDataToList()

  #调用getAllServiceId获取法业务类型列表

  服务id列表=自身。getallserviceid()

  #判断列表中是否有元素,如果有执行如果语句

  如果len(serviceIdList) 0和len(数据列表)0:

  #对serviceIdList进行循环,以法业务类型作为键

  对于serviceIdList中的服务Id:

  #创建一个目录用来存放法业务类型相同的数据项

  sameServiceidJosnList=[]

  #对数据列表执行循环

  对于数据列表中的项目:

  #获取字典中键为法业务类型值,放入变量中

  项目服务标识=项目[服务标识]

  #如果值不为空,执行如果语句

  if itemServiceId:

  #判断法业务类型与数据项中法业务类型的值是否相等

  #如果相等执行如果语句块

  如果serviceId==itemServiceId:

  #把数据项加入sameServiceidJosnList列表中

  sameserviceidjosnlist。追加(项目)

  否则:

  logging.debug(ServiceId为空)

  #打印服务身份为空

  #给字典赋值,以法业务类型作为钥匙,

  #服务身份相同的数据项列表作为值

  dataDic[服务id]=sameServiceidJosnList

  否则:

  logging.debug(seriviceIdList或数据列表为空)

  #打印服务编号列表或数据列表为空

  #返回字典类型的数据

  返回数据(油)密度指示控制器(Density Indicating Controller的缩写)

  除了例外,e:

  logging.error(创建数据字典错误: e )

  #打印创建数据字典错误:,e

  #打印字典信息

  def printDicData(自身):

  尝试:

  #调用createDataDic创建数据字典字典

  dataDic=self.createDataDic()

  #对字典中的数据进行循环,获取键值对

  对于serviceId,dataDic.items()中的数据项:

  打印 {

  打印\t ,服务Id,:,[

  #由于值是列表,列表中的数据项类型是字典类型

  #每一数据项是哈希表

  对于数据项目中的项目:

  打印\t\t{

  #输出哈希表中的数据

  对于key,item.items()中的val:

  打印\t\t\t ,键,:,值,,

  打印\t\t},

  打印\t]

  打印}\n

  打印 #*50

  除了例外,e:

  logging.error(输出字典数据错误: e )

  #打印输出字典数据错误:" e

  定义测试():

  gen=GenExceptData()

  gen.printDicData()

  if __name__==__main__ :

  测试()3。运行结果

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • js把字符串转为json,json字符串转换成json对象
  • js把字符串转为json,json字符串转换成json对象,js 将json字符串转换为json对象的方法解析
  • json语法格式,json格式定义
  • json语法格式,json格式定义,Json格式详解
  • json格式数据类型,什么是JSON数据-其常见格式是什么-
  • json格式数据类型,什么是JSON数据-其常见格式是什么-,JSON 数据格式详解
  • json格式怎么写,json文件内容格式
  • json格式怎么写,json文件内容格式,json文件书写格式详解
  • json数组对象转化为json字符串,js把数组转化为json
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法,JSON对象转化为字符串详解
  • json基础介绍与详细用法教程,json基础知识
  • json基础介绍与详细用法教程,json基础知识,JSON基础介绍与详细用法
  • json去掉反斜杠,json字符串中有反斜杠
  • json去掉反斜杠,json字符串中有反斜杠,详解json串反转义(消除反斜杠)
  • 留言与评论(共有 条评论)
       
    验证码: