使用 for 循环拆分 CSV 数据并打印一个变量。 ValueError:需要多于 1 个值才能解压?

Posted

技术标签:

【中文标题】使用 for 循环拆分 CSV 数据并打印一个变量。 ValueError:需要多于 1 个值才能解压?【英文标题】:Using for loop to split CSV data and print one variable. ValueError: need more that 1 value to unpack? 【发布时间】:2015-09-21 14:29:06 【问题描述】:

我正在尝试逐行读取 CSV 数据,在每行中分离出 1 条数据并打印出来。

CSV 样本:

Date,Open,High,Low,Last,Change,Settle,Volume,Prev. Day Open Interest
1969-06-25,22.0,22.0,22.0,,,22.0,3.0,3.0
1969-06-26,23.0,23.0,21.9,,,21.9,6.0,9.0

我的代码:

file1 = 'LNG1970'

infile = open(('%s.csv' % file1), 'r')

for line in infile.readlines():
    (d, o, h, l, la, ch, s, v, o) = line.split(",")
    print(d)

控制台返回错误:

回溯(最近一次通话最后一次): 文件“”,第 1 行,在 运行文件中的文件“C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 682 行 执行文件(文件名,命名空间) 文件“C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 85 行,在 execfile exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace) 文件“C:/Users/Nutrade/Desktop/Python/Quandl Hog Project/spreadmaker.py”,第 6 行,在 (d, o, h, l, la, ch, s, v, o) = line.split(",") ValueError: 需要超过 1 个值才能解压

有人可以解释为什么会发生这种情况以及如何纠正吗?

【问题讨论】:

看起来你打了一个空行或没有逗号。 【参考方案1】:

在尝试解包之前尝试分配给临时文件,如果长度不正确则跳过。

for line in infile.readlines():
    temp = line.split(",")
    if not len(temp) == 9:
        continue
    (d, o, h, l, la, ch, s, v, o) = temp
    print(d)

【讨论】:

【参考方案2】:

您的代码运行良好。正如here 所讨论的,您的CSV 文件末尾可能有一个或多个空行。 (很难从您的问题中分辨出来,因为 CSV 文件的格式不正确。请参考 here 以获取有关使用 Markdown 格式化文本的帮助。)

【讨论】:

感谢平等!这似乎是问题所在!

以上是关于使用 for 循环拆分 CSV 数据并打印一个变量。 ValueError:需要多于 1 个值才能解压?的主要内容,如果未能解决你的问题,请参考以下文章

awk 拆分更多列并打印第一个单词

用嵌套的for循环编写程序,要求通过这个嵌套的循环在屏幕上打印下列图案:

将 for 循环中的多个打印输出值存储到列表或变量中

在 python for 循环中一次运行 3 个变量。

在 for 循环中添加整数并打印总数

将 Xpath 转换为列表变量并使用 For 循环