【发布时间】:2017-04-14 02:06:13
【问题描述】:
我有一个如下所示的 csv 文件:
1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
...
16000;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
我编写了以下 Python 脚本:
import csv
path = 'pathToCSV.csv'
dLst = []
class Datensatz:
#0:schluesse 1:straftat 2:gemeindeSchluessel 3:stadt 4:kreisart 5:erfassteFaelle 6:HZnachZensus
#7:versucheAnzahl 8:versucheInProCent 9:mitSchusswaffeGedroht 10:mitSchusswaffeGeschossen=
#11:aufgeklaerteFaelle 12:aufklaerungsquote 13:tatverdaechtigeInsgesamt 14:tatverdaechtigeM
#15:tatverdaechtigeW 16:nichtdeutscheTatverdaechtigeAnzahl 17:NichtdeutscheTatverdaechtigeInProCent
datensatz =['','','','','','','','','','','','','','','','','','']
def createDatensatz(row):
d = Datensatz()
for i in range(0,17):
d.datensatz[i] = row[i]
return d
def readCSV():
with open(path, 'r', encoding = 'iso-8859-15') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';')
for row in spamreader:
#First print
print(createDatensatz(row).datensatz[0])
dLst.append(createDatensatz(row))
for item in dLst:
#second print
print(item.datensatz[0])
if __name__ == "__main__":
readCSV()
对于我的代码中的第一次打印,我得到了从 1 到 16000 的所有数字,这是正确的!
但是在将对象添加到我的列表后的第二次打印,我得到了最后一个值的 16000 倍。
16000
16000
16000
...
16000
为什么? 问题出在哪里?
【问题讨论】:
-
Datensatz.datensatz是一个类成员,在Datensatz的所有实例之间共享。您必须为您的班级创建一个__init__并在那里初始化实例成员。
标签: python