值错误:太多的值无法用太多的元组进行解包

2024-09-30 00:38:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在排序47万个元组时出错。 我把csv文件中的数据读入元组列表

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

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

^{pr2}$

我把所有和同一个号码相关联的名字收集在一个列表中,然后把它映射到那个号码,然后对所有这些项目形成一个dict,类似这样

{'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)

对于较小数量的元组(到目前为止,我已经测试了20000个),但是对于更大的元组(比如470000个)似乎没有效果。在

大量的元组是个问题还是由于文件损坏?如果这是由于文件中的某些损坏的数据造成的,我能做些什么来找出它是什么样的损坏数据,比如try,exception?在

我得到这个错误

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)

Tags: 文件csv数据in列表for排序line
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))

通过查看代码并进行猜测,可能会发生的情况是,文件的最后一行可能是一个没有任何内容的额外行。因此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()

相关问题 更多 >

    热门问题