【问题标题】:too many values to unpack (expected 11)太多值无法解压(预计 11)
【发布时间】:2016-02-14 00:55:09
【问题描述】:

我有一个程序从一个文本文件中读取,该文件包含有多少人使用用户输入的电子邮件。这是我的代码:

user = input('Enter an email: ')
f_in = open('us-500.csv','rt')
c = 0
f_in.readline()
for line in f_in:
    line = line.strip(' ')
    first, last, company, address, city, country, state, phone1, phone2, email, web = line.split(',')
    for count in line:
        if count == user:
            c +=1
print(c)

f_in.close()

【问题讨论】:

  • 你能描述一下错误吗?
  • 我无法读取该文件,因为它包含太多需要解压的值。我只是想计算文件中有多少封电子邮件

标签: python csv python-3.x


【解决方案1】:

看起来 csv 文件中的列比您预期的要少。调试代码,看看line的值是什么,然后用逗号分隔。

另外,我会改用csv module

import csv

user = input('Enter an email: ')
with open('us-500.csv', 'r') as f_in:
    reader = csv.reader(f_in)

    row = next(reader)
    print(row)  # see if row has 11 items
    first, last, company, address, city, country, state, phone1, phone2, email, web = row

【讨论】:

  • 代码可以工作,但它会打印文件中的电子邮件。我想我错过了什么
【解决方案2】:
first, last, company, address, city, country, state, phone1, phone2, email, web = line.split(',')

左侧有 11 个变量。这意味着为了使分配成功,右侧必须恰好有 11 个零件。因此,在您的情况下,line.split(',') 需要恰好产生 11 个项目。

从错误消息来看,情况似乎并非如此:值超过 11 个。因此,您应该检查文件的内容以找出还有哪些值。也许你忘记了一两个变量。

或者,您也可以更改分配,以便您可以获取任意数量的更多项。为此,请在末尾添加一个 *rest 名称。星号确保所有剩余的项目都作为列表存储在该变量中:

>>> a, b, *c = 'a,b,c,d,e,f'.split(',')
>>> c
['c', 'd', 'e', 'f']

【讨论】:

  • 代码可以工作,但它会打印文件中的电子邮件。我想我错过了什么
猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 2015-12-20
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多