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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。