【问题标题】:ValueError: need more than 1 value to unpack (Python)ValueError:需要超过 1 个值才能解压(Python)
【发布时间】:2014-08-10 02:25:23
【问题描述】:

当我在下面运行此代码时,我在 for dt, value in group 行上收到值错误 need more than 1 value to unpack。这是我的 .csv 文件中的几行:

TimeStamp,Irradiance,Ambient_Temperature
21/7/2014 0:00,0.66,29.16
21/7/2014 0:00,0.71,29.16
21/7/2014 0:00,0.65,29.17
21/7/2014 0:00,0.67,29.17
21/7/2014 0:01,0.58,29.17
.
.
.
22/7/2014 23:58,0.69,28.54
22/7/2014 23:58,0.61,28.54
22/7/2014 23:58,0.65,28.51
22/7/2014 23:58,0.59,28.54
22/7/2014 23:59,0.63,28.55
22/7/2014 23:59,0.67,28.54
22/7/2014 23:59,0.68,28.56
22/7/2014 23:59,0.58,28.55

代码:

--------已编辑 ------

【问题讨论】:

  • 那么您检查过group 实际上是什么吗?另外,请检查您的代码缩进。
  • 组指的是csv文件的日期时间
  • 那你觉得怎么解包成dtvalue这两个名字?
  • 我该如何解决这个错误?顺便说一句,感谢您的回复
  • 您的 csv 看起来是以逗号分隔的,但您使用 delimiter=b'\t'。将其更改为 delimiter=','

标签: python


【解决方案1】:

您的代码中有几个错误。第一个是关于您对变量“组”的使用,第二个是关于您对 strptime 的使用。试试这个

from datetime import datetime, time
with open(r'data.cvs', 'rb') as f:
    reader = csv.reader(f, delimiter=b'\t')
    groups = itertools.groupby(reader, lambda row: row[0].split()[0])
    for date, group in groups:
        new_group = [(datetime.strptime(date, "%d/%m/%Y"), value) for value in group]
        during_8to5 = [(dt, value) for dt, value in new_group if time(8) <= dt.time() < time(17)]

【讨论】:

  • hi avanzo,非常感谢您的回复,您的约会时间是分开的吗?
  • 嗨 avanzo,我用你的建议更正了我的代码,但我得到了两个错误:new_group = [(datetime.strptime(date, "%d/%m/%Y"), value) 的价值in group] 第二个错误是:groups = itertools.groupby(reader, lambda row: row[0].split()[0]) 这是一个 IndexError: list index out of range
  • 尝试将分隔符恢复为原始版本:delimiter=b'\t' 就像我的代码一样。
【解决方案2】:

您的代码中的缩进是错误的,我无法弄清楚您到底想要做什么。 但是我知道你ValueError的原因。

在第一个代码 sn-p reader = csv.reader(f, delimiter=b'\t') 中,您使用 \t 作为分隔符。但是你的 csv 文件中真正的分隔符是,。因此,for dt, value in group 行中的group 的值是一个仅包含一个元素['21/7/2014 0:00,0.66,29.16'] 的列表。所以解压是不对的。

在第二个代码 sn-p 中,reader = csv.reader(f, delimiter=b',')for dt, value in group 行中group 的值是一个仅包含三个元素['21/7/2014 0:00', '0.66', '29.16'] 的列表。所以还是报错。

也许你可以这样写代码:

reader = csv.reader(f, delimiter=b',')

for dt, value1, value2 in group

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2013-04-04
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多