【问题标题】:ValueError trying to iterate throughValueError 试图遍历
【发布时间】:2013-09-21 21:03:28
【问题描述】:

新手python查询。

使用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,但无法正确使用。欢迎提供一些帮助。干杯

【问题讨论】:

  • 您能否检查您的BNG.csv 文件中是否有任何包含多个逗号的行?该错误表明 CSV 模块在某些时候为一行提供了两个以上的值,当它尝试将它们解压缩到 E, N 变量中时会生成异常。
  • 为了测试,将当前的 for 语句替换为 for line in BNG: try: E,N = line; except ValueError: print(line)(根据需要使用换行符和缩进),然后是循环体的其余部分,也可能是有效的。跨度>
  • 该错误表明您有更多件物品,而不是更少。
  • 我从 R 调用 python 并且 .csv R 正在为 python 读取写入确实有三个值。非常感谢您的提示。经验教训。

标签: python csv python-2.7


【解决方案1】:

正如错误所暗示的,在文件中的某个位置有一行没有两个元素。找到该行的简单方法:

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

当脚本出错时,它会打印最后一个成功的行——因此请检查文件中的下一行。

【讨论】:

  • 感谢您的代码。帮助我将错误追溯到 .csv 文件。
  • 不客气。不要忘记接受适合您的答案(点击绿色复选标记)。
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2019-08-09
相关资源
最近更新 更多