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抓取京东价格分析京东商品价格走势
Jan 09 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
django序列化时使用外键的真实值操作
Jul 15 Python
Python logging模块原理解析及应用
Aug 13 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python基于opencv 实现图像时钟
Jan 04 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类
2006/11/25 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
人事主管的岗位职责
2013/11/16 职场文书
药剂专业学生求职信范文
2013/12/28 职场文书
学生自我评价范文
2014/02/02 职场文书
运动会广播稿20字
2014/02/18 职场文书
创新型城市实施方案
2014/03/06 职场文书
甘南现象心得体会
2014/09/11 职场文书