ValueError:需要多个值进行解包(Python)

0 投票
2 回答
1070 浏览
提问于 2025-04-18 16:21

当我运行下面的代码时,出现了一个值错误,提示 需要更多的值来解包,这个错误发生在 for dt, value in group 这一行。以下是我 .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

代码:

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

2 个回答

0

你的代码缩进有问题,我搞不清楚你到底想做什么。不过我知道你遇到的ValueError的原因。

在第一个代码片段中,reader = csv.reader(f, delimiter=b'\t'),你用\t作为分隔符。但实际上你csv文件里的分隔符是,。所以在for dt, value in group这一行,group的值是一个只包含一个元素的列表,内容是['21/7/2014 0:00,0.66,29.16']。这样拆包是错误的。

在第二个代码片段中,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
0

你的代码里有几个错误。第一个错误是关于你使用的变量'group',第二个错误是关于你使用的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)]

撰写回答