我在写剧本,我需要这样做:
for ip, location, zone, dns in data:
但我得到一个错误:
^{pr2}$data
是这样构建的:
def loadfile():
nativeFile = open("Zonechilds.csv","r")
newLine=" "
data=[]
while newLine!="":
newLine=nativeFile.readline()
if len(newLine)>0:
if newLine[len(newLine)-1]=="\n":
newLine=newLine[0:len(newLine)-1]
data.append(tuple(newLine.split(";")))
ultimo = data.pop()
return data
csv文件的一个小示例:
200.35.126.30;dnscan01.mnc0004.mcc02de.gprs;View_Blackberry;DNSCAN01
0.0.0.0;lac.rac.prueba;View_Blackberry;DNSCAN01
200.35.126.29;dnscan02.mnc0004.mcc02de.gprs;View_Blackberry;DNSCAN01
127.0.0.1;localhost.mnc0004.mcc02de.gprs;View_Blackberry;DNSCAN01
当我这样做的时候:
for i in data:
print len(i)
我只得到4个,我可以假设我的列表数据的任何位置都是4个成员的列表。在
我不明白为什么它告诉我它需要3个以上的成员,而我给它4个。在
这个代码怎么了?在
如果数据的所有成员都是4个成员元组或4个成员列表,并且在for循环期间没有修改数据中的任何后面的列表,那么我很确定在从数据中解包元素时不可能出现这种异常。在
我能看到的两个最有可能的解释是:
1)对于异常是在哪里引发的,您弄错了。它发生在for循环的某个地方,而不是在分配ip、位置、区域和dns时。检查堆栈跟踪并确保行号与for循环的顶部匹配。在
2)在数据中的某个地方有一个秘密的三成员元组或列表。你真的,真的确定不是这样吗?是否所有([len(i)==4 for i in data])都为真?在
你的文件可能没有你想的那样格式好。里面一定有一些三元元组。在
您可以在迭代时检查打印出整个
data
或每个元素的内容,例如:这允许您查看导致错误的原因。在
顺便说一句,您的代码可以写得更好,例如:
^{pr2}$(实际上,我写这个答案更多的是因为最后一个关于代码风格的建议,而不是其他问题,我认为这只是一个容易验证的错误假设)
旁白:在Python中读取csv数据的错误方法是使用
csv
模块。您的整个代码将变成类似于:产生
^{pr2}$相关问题 更多 >
编程相关推荐