ValueError:用太多元组解压缩的值太多了

时间:2016-06-26 04:13:41

标签: python

排序约470000个元组时出错。 我将csv文件中的数据读入元组列表

fp = open(filename, 'Ur')
for line in fp:
  listOfCitiesTuples.append(tuple(line.strip().split(',')))
fp.close()

元组是一些与数字相关联的城市名称。

[('Chiredzi', '4117'), ('Gaths', '4117'), ('Masvingo', '4117'), ('Chivhu', '4120'), ('Gweru', '4120'), ('Kwekwe', '4120'), ('Mvuma', '4120'), ('Redcliffe', '4120'), ('Shurugwi', '4120'), ('Zvishavane', '4120')]

我在列表中收集与相同号码相关联的所有名称,并将其映射到该号码并形成所有这些项目的词典,如下所示

{'1': ['Bombuflat', 'Garacharma', 'Port Blair', 'Rangat'], '113': ['Hydra', 'Kouba'], '294': ['Vienna', 'Wien'], '1327': ['Lambarene', 'Ndjole']}

使用以下方法实现它

for k, v in listOfCitiesTuples:  dictOfCitiesTuples.setdefault(v, []).append(k)

这适用于较少数量的元组(到目前为止我已经测试了20,000个),但似乎没有像470000那样使用更大的数字。

大量的元组可能是一个问题还是可能是由于文件损坏?如果是由于文件中的某些损坏的数据,我是否可以做些什么来找出哪些损坏的数据就像尝试,例外?

我收到此错误

File "/../view.py", line 186, in getCities
    for k, v in listOfCitiesTuples:  dictOfCitiesTuples.setdefault(v, []).append(k)
ValueError: too many values to unpack (expected 2)

2 个答案:

答案 0 :(得分:2)

根据您的标题ValueError: too many values to unpack,您提供的格式与您预期的格式不同。

具体来说,某些行有多个逗号,这些逗号会使一个元组的值超过2,然后在尝试解压缩时会导致错误。

在迭代文件时,可以检查元组的长度是否正确。如果您发现不良数据,您可以记下并修复它,或忽略它。取决于您的需求。

with open(filename, 'Ur') as infile:
    for line_num, line in enumerate(infile):
      vals = tuple(line.strip().split(','))
      if len(vals) == 2:
          listOfCitiesTuples.append(vals)
      else:
          bad_data.append((line_num, line))

答案 1 :(得分:0)

通过查看您的代码并进行猜测,可能发生的事情是该文件的最后一行可能是一个没有任何内容的额外行。因此line.strip().split(',')会返回一个大小为1的列表,该列表会变成一个大小为1的元组,它会在你的for循环中爆炸。添加以下警卫:

fp = open(filename, 'Ur')
for line in fp:
  if len(line.strip()) > 0:
    listOfCitiesTuples.append(tuple(line.strip().split(',')))
fp.close()