2013-09-21 51 views
3

新手python查询。ValueError试图迭代

使用Python 2.7.3

尝试下面的代码:

#Read in from a file 
BNG = csv.reader(open('BNG.csv', 'rU'), delimiter = ',') 
BNG.next() 

#Get the output file ready 
outputFile = open('BNGandLatLon.csv', 'wb') 
output=csv.writer(outputFile,delimiter=',') 
output.writerow(['Lat', 'Lon', 'E', 'N']) 

#Loop through the data 
for E,N in BNG: 
    lat, lon = OSGB36toWGS84(float(E), float(N)) 
    output.writerow([str(lat), str(lon), str(E), str(N)]) 
#Close the output file 
outputFile.close() 

但它在迭代翻倒在BNG有:

ValueError: too many values to unpack 

我已经签出这个错误(例如Iterate over a string 2 (or n) characters at a time in Python),并认为这是与for E, N in BNG:找到一个项目(E和N)而不是两个单独的EN值。但是我从BNG.csv文件中解决了这个问题。已经使用.itemzipizip,但一直没有把它弄清楚。一些帮助将受到欢迎。干杯

+0

你可以检查你的'BNG.csv'文件是否有超过一个逗号的行吗?这个错误表明,在某些时候,CSV模块为一行提供了两个以上的值,当它试图将它们解压缩到E,N变量时会产生异常。 – Blckknght

+1

进行测试时,用'for BNG行代替当前'for'语句可能也很有效:try:E,N = line;除了ValueError:print(line)'(用适当的换行和缩进),接着是循环体的其余部分。 – Blckknght

+0

该错误表示您拥有*多于两项,不少于两项。 –

回答

0

由于错误提示,在文件的某个点有一行没有两个元素。一个简单的方法来找到该行:

i = 0 
for E, N in BNG: 
    print i 
    i += 1 
    lat, lon = ... 
    output.writerow(...) 

当脚本错误时,它都会打印上一次成功行 - 因此,请检查该文件中的下一行。

+0

感谢您的代码。帮助我将错误追踪到.csv文件。 – mark

+0

不客气。不要忘记接受适合你的答案(点击绿色的复选标记)。 –