ValueError:需要多个值进行解包(Python)
当我运行下面的代码时,出现了一个值错误,提示 需要更多的值来解包
,这个错误发生在 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)]