【发布时间】:2018-09-12 09:09:43
【问题描述】:
import os
from matplotlib import pyplot as pyplot
from collections import defaultdict
import csv
import numpy as np
path = r'C:\Users\AK6PRAKT\Desktop\6daten'
dirs = os.listdir(path)
s = []
x = []
y = []
names = []
fig = pyplot.figure()
for i in dirs:
if os.path.splitext(i)[1] == ".csv":
f = open(path+"/"+i)
iter_f = iter(f);
str = ""
for line in iter_f:
str = str + line
s.append(str)
with open(path+"/"+i,'r') as r:
lines=r.readlines()
with open(path+"/"+i,'w') as w:
for row in lines:
if 'Date' not in row:
w.write(row)
columns = defaultdict(list)
with open(path+"/"+i) as f:
reader = csv.reader(f)
for row in reader:
for (i,v) in enumerate(row):
columns[i].append(v)
list_temp1 = columns[0]
list_temp1 = np.array(list_temp1)
list_temp2 = columns[2]
list_temp2 = np.array(list_temp2)
print(list_temp1,list_temp2)
y.append(float(list_temp2))
names.append(list_temp1)
x = range(len(names))
pyplot.ylim((0, 40))
my_y_ticks = np.arange(0, 40, 10)
pyplot.plot(x,y, linewidth=2)
pyplot.xticks(x,names,rotation = 90)
fig = pyplot.figure(figsize=(10,10))
pyplot.show()
如果只有几个 csv 文件,此代码效果很好。但是我想在实践中应用这段代码,我需要分析超过 200000 个 csv 文件并制作图形,以便我可以清楚地看到这些数据的波动,但是当我想导入这些宏伟的文件时,会出现以下错误:
File "C:/Users/AK6PRAKT/headerremover.py", line 44, in <module>
y.append(float(list_temp2))
TypeError: only size-1 arrays can be converted to Python scalars
我真的不知道如何解决这个问题,如果有人可以帮助我,非常感谢!!!!!!
【问题讨论】:
-
我的意思是如果我只导入10或100个文件,结果和图形显示在python中,但是如果我打开10000个文件,就会出现这样的错误,我对此很困惑......
-
问题是您在列表
list_temp2上使用操作float并尝试将列表中的所有元素一次转换为浮动。你不能那样做。float需要一个标量参数。您需要一次将列表中的每个元素转换为浮动一个。您可以使用y = [float(i) for i in list_temp2]之类的列表理解 -
@Bazingaa 谢谢你的建议!!我试过了,似乎旧问题已经解决,但现在又出现了一个新问题……就像: File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook_init_.py", line 2357, in safe_first_element raise RuntimeError("matplotlib does not support generators " RuntimeError: matplotlib does not support generators as input
-
我不知道你代码中的哪一行是这个错误来自
-
我可以提一下,如果您发布完全未更改的代码并已被 SO 用户 (stackoverflow.com/q/52223419/8300135) 优化过,这没有帮助吗?我认为 Sam Mason 做了一个很好的审查工作,并准确地给了你想要实现的目标,但结构化并使用了 python 提供的适当工具。如果您已经处理了该提案并在此处发布了一个新版本,那么没有人会因为已经解决的问题而浪费时间思考如何优化您的程序。如果您使用干净的代码,您是否确定您在此处发布的错误仍然会出现...?
标签: python python-3.x matplotlib graphics