我正在使用python 2.7.3
这是我的代码片段:
linematchregex = re.compile('(\d+/\d+ \d+:\d+), (\d+\.\d+)')
.
.
with open(r'temp.txt', 'r') as f:
f.next()
t,temp = zip(*[p for line in for p in linematchregex.findall(line)])
groups = itertools.groupby(f, lambda row row[0].split()[0])
for date, group in groups:
group = [(datetime.strptime(dt), value)
**for dt, value in group]**
during_8to5 = {len(value) for value in group
if datetime.time(8) <= dt.time() < datetime.time(17)}
.
.
.
.
long_title = {'\n Max AMB_TEMP Value: {:.2f} at {}, Min AMB_TEMP Value: {:.2f} at
{}, Mean AMB_TEMP Value: {:.2f} at {}')
ax1.set_title(long_title.format(max(group),min(group),sum(during_8to5)/len(during_8to5))
当我运行模块时,我得到了dt,组中的值&#39;我得到了太多的值来打开包装&#39;
fyi,我的txt文件数据是:21/7/2014 0:00,0.66,29.16 所以我应该把&#39;分裂(&#39;,&#39;)&#39;因为我的数据用逗号分隔? 因为我的时间是h:m格式,只需要8和17就可以了吗?
答案 0 :(得分:0)
我认为你的价值在&#34; group&#34;可能不是全长相等。请考虑以下简单示例:
>>> a, b = 1, 2, 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
现在,我认为你想要的是:
>>> [ (a, b) for a, b in [[1,2],[3,4], [5,6]] ]
[(1, 2), (3, 4), (5, 6)]
但是会发生什么:
>>> [ (a, b) for a, b in [[1,2], [3,4], [5,6,7]] ]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
ValueError: too many values to unpack (expected 2)
您可以通过以下简单的方式快速仔细检查:
during_8to5 = {len(vals) for vals in group
if datetime.time(8) <= dt.time() < datetime.time(17)}
print(during_8to5)
如果结果集不包含单个值,则可以知道问题所在。
我可能已经查看了自行,因为你正在使用
for dt, value in group
在2个地点。如果您只使用像pdb这样的调试器,将len
的打印向上移动一级,或者如果发生try-except
则使用group
打印ValueError
的长度,该怎么办?并退出程序。