Python把csv数据写入list和字典类型的变量脚本方法


Posted in Python onJune 15, 2018

如下所示:

#coding=utf8
import csv 
import logging
logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%a, %d %b %Y %H:%M:%S',
        filename='readDate.log',
        filemode='w')
'''
该模块的主要功能,是根据已有的csv文件,
通过readDataToDicl函数,把csv中对应的部分,
写入字典中,每个字典当当作一条json数据
'''
class GenExceptData(object):
  def __init__(self):
    try:
      #存放csv中读取的数据
      self.mdbuffer=[]
      #打开csv文件,设置读的权限
      csvHand=open("20170510174450.csv","r")
      #创建读取csv文件句柄
      readcsv=csv.reader(csvHand)
      #把csv的数据读取到mdbuffer中
      for row in readcsv:
          self.mdbuffer.append(row) 
      #把数据穿件为为字典类型的
      #self.readDataToList()
      #保存文件
    except Exception,e:
      logging.error("Read Excel error:"+e) 
    finally:
      #关闭csv文件
      csvHand.close()
 
  def readDataToList(self):
    try:
      #获取mdbuffer中的元素个数
      rowNumber=len(self.mdbuffer)
      #设置当前行号
      currentrow=1
      #设置json数据的属性值
      propertyJson={}
      #propertyJsonList=[]
      #count=0
      #读取列表中的元素  
      dataList=[] 
      try: 
        for row in range(1,rowNumber):
          #创建一个临时变量用来存取一次循环的属性键值
          temp={}
          
          #获取列表中一个元素
          item=self.mdbuffer[row]
          #获取当前元素,当前元素代表的是每个
          #事件起始的位置
          currentItem=self.mdbuffer[currentrow]
          #获取serviceId并进行解码
          serviceId= currentItem[2].decode("gbk")
          #获取属性并进行解码,把解码的值存入propertyName
          propertyName=item[3].decode("gbk")
          #获取属性值并进行解码,把解码的值存入propertyValue
          propertyValue=item[4].decode("gbk")
          try:
            #判断埋点事件与serviceId是否相等
            if item[0]==currentItem[0] and item[2]==currentItem[2]:
              #把serviceId方式字典propertyJson中
              propertyJson["serviceId"]=serviceId 
              #把属性/值对放入temp字典中                         
              temp[propertyName]=propertyValue
              #调用字典的update函数,把temp中的键值对
              #添加到 propertyJson字典中
              propertyJson.update(temp)
              #使用continue,如果为if条件为true则循环执行if语句模块
              continue 
            else:
              #把行号设置为当前行
              currentrow=row 
              #把当前的属性解码放入propertyName          
              propertyName=currentItem[3].decode("gbk")
              #把当前的属性值解码放入propertyName
              propertyValue=currentItem[4].decode("gbk")
              #把serviceId方式字典propertyJson中 
              propertyJson["serviceId"]=serviceId  
              #把属性/值对放入propertyJson字典中 
              propertyJson[propertyName]=propertyValue
              #propertyJsonList.append(propertyJson) 
              dataList.append(propertyJson)
              '''
              在这说下:
              propertyJson.clear()与propertyJson={}的区别:
              propertyJson.clear()是删除字典的值,不创建引用,会改变字典本身的值;
              propertyJson={}是创建新的引用,字典的中的值不发现变化;
              如果想让 self.dataDic.append(propertyJson)该语句执行成功,而且添加每次循环的值,
              需要使用propertyJson={}方法;
              如果使用propertyJson.clear(),只会把最后一次propertyJson存储的值,添加到self.dataDic中
              '''
              propertyJson={}
          except Exception,e:
            logging.error("Get Property Json Error:"+e) 
            print "Get Property Json Error:",e
      except Exception,e:
        logging.error("Get Date Error:"+e) 
        print "Get Date Error:",e
      return dataList   
    except Exception,e:
      logging.error("Reading Data TO Dic Error:"+e) 
      print "Reading Data TO Dic Error:",e
    
  def getAllServiceId(self):
    try:
      dataList=self.readDataToList()
      serList=[item["serviceId"] for item in dataList if item["serviceId"] ] 
      serList=list(set(serList))
      return serList
    except Exception,e:
      logging.error("Create ServiceId List Error:"+e)
      print "Create ServiceId List Error:"+e
                    
  def oupPutData(self):
    try:
      dataList=self.readDataToList()
      for item in dataList:     
          print "{"  
          for key,val in item.items(): 
            print key,":",val
          print "}"
          print "#"*50
    except Exception,e:
      logging.error("OutPut Data Error:"+e)
      print "OutPut Data Error:"+e
  
   
  def createDataDic(self):
    try:
      dataDic={}
      
      dataList=self.readDataToList()
      count=0
      for item in dataList:
        if item["serviceId"]==u"pageview":
          count+=1
      print count
          
      serviceIdList=self.getAllServiceId()
      if len(serviceIdList)>0 and len(dataList)>0:
        for serviceId in serviceIdList:
          sameServiceidJosnList=[]
          for item in dataList:          
            itemServiceId=item["serviceId"]
            if itemServiceId:
              if serviceId==itemServiceId: 
                sameServiceidJosnList.append(item)                               
            else:
              print "ServiceId is null"
          dataDic[serviceId]=sameServiceidJosnList 
          
      else:
        print "seriviceIdList or dataList is null"
      return dataDic
      ''' 
      for key,val in dataDic.items():
        print key,len(val)
        print "*"*50
        for item in val:
          print "{"
          for ke,va in item.items():
            print ke,":",va
          print "}"
        print "-"*50
      '''
    except Exception,e:
      print "Create Data Dictionary Error:",e 
    
def test():
  gen =GenExceptData()
  gen.oupPutData()
  
if __name__=="__main__":
  test()

以上这篇Python把csv数据写入list和字典类型的变量脚本方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Django中django-userena组件的简单使用教程
May 30 Python
python实现爬虫下载美女图片
Jul 14 Python
Python编程实现蚁群算法详解
Nov 13 Python
python使用插值法画出平滑曲线
Dec 15 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
python常用数据重复项处理方法
Nov 22 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
python异常中else的实例用法
Jun 15 Python
Python对象属性自动更新操作示例
Jun 15 #Python
numpy使用fromstring创建矩阵的实例
Jun 15 #Python
详解Python 协程的详细用法使用和例子
Jun 15 #Python
在NumPy中创建空数组/矩阵的方法
Jun 15 #Python
numpy中矩阵合并的实例
Jun 15 #Python
对numpy中shape的深入理解
Jun 15 #Python
Python基于property实现类的特性操作示例
Jun 15 #Python
You might like
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
移动端js图片查看器
2016/11/17 Javascript
js实现返回顶部效果
2017/03/10 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
Python如何实现强制数据类型转换
2019/11/22 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
婚礼证婚人证婚词
2014/01/08 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
先进典型事迹材料
2014/12/29 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python