如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
#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" ] ] 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和字典类型的变量脚本方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/henni_719/article/details/74990209