不断收到ValueError:没有足够的值可解包(预期2,得到1)

时间:2020-01-19 21:31:09

标签: python file csv comma

我正在阅读Kinder和Nelson的书 Python物理建模学生指南。第3章的开头是用于下载可用于练习的准备好的数据集的信息。数据集位于zip文件中,网址为press.princeton.edu/titles/10644.html。我要从zip文件尝试使用的数据集是HIVseries.csv。该文件包含16行代码,如下所示:

0, 1.061e+05
0.0831, 93240
0.1465, 1.6672e+05
0.2587, 1.5378e+05
0.4828, 1.188e+05
0.7448, 1.169e+05
0.9817, 1.0957e+05
1.2563, 1.1135e+05
1.4926, 74388
1.7299, 83291
1.9915, 66435
3.0011, 35408
4.0109, 21125
5.009, 20450
5.9943, 15798
7.0028, 4785.2

这是两列数字,用逗号分隔。在第48和49页上,这本书指示我使用以下命令加载数据集并以数组的形式生成数据:

import numpy as np

data_set=np.loadtxt("HIVseries.csv", delimiter=',')
my_file=open("HIVseries.csv")
temp_data=[]
for line in my_file:
    print(line)
    x, y = line.split(',')
    temp_data +=[(float(x), float(y))]
my_file.close()
data_set=np.array(temp_data)

运行这些命令时,我不断收到以下错误: ValueError:没有足够的值可解包(预期2,得到1)

我不明白为什么会出现此错误。 line.split命令清楚地告诉Python使用文件中的逗号分隔数据。此外,我正按照书中的说明输入所有内容。到底有两个值,世界上怎么能告诉我只有一个值?

2 个答案:

答案 0 :(得分:1)

错误的原因很可能是您在文件中有一些多余的行而没有逗号,并且到达该行时,它抛出了您共享的错误(最后,当运行带有文本的代码时您共享了它的效果,但是例如,如果我在末尾附加一些空行,则会抛出相同的错误)。

要进行调试,您可以在x, y = line.split(',')import pdb; pdb.set_trace()之前附加一行,然后再次运行该程序。这样,程序将在x, y = line.split(',')之前暂停,并为您提供运行交互式代码的机会。例如,您可以查看每个line的外观以及哪个引发了错误。

答案 1 :(得分:0)

我终于明白了。数据文件在数据之前有一些空白行。 Python正在阅读这些行,好像它们意味着什么。