在Python上打印从CSV流获取的字符串值
我没有很强的Python和编程背景,目前我一直在绘制从csv流中获取的数据/值 目前,这就是我必须打印从.csv(传感器实时数据)流式传输的值,我从以下位置获取: 通过运行上面的脚本,我得到了这样的值行(这里是多行中的两行的示例): 我想绘制每行(每行1个绘图)。然而,我意识到这些值被指示为在Python上打印从CSV流获取的字符串值,python,python-3.x,string,matplotlib,seek,Python,Python 3.x,String,Matplotlib,Seek,我没有很强的Python和编程背景,目前我一直在绘制从csv流中获取的数据/值 目前,这就是我必须打印从.csv(传感器实时数据)流式传输的值,我从以下位置获取: 通过运行上面的脚本,我得到了这样的值行(这里是多行中的两行的示例): 我想绘制每行(每行1个绘图)。然而,我意识到这些值被指示为'str'。 那么,如何将其更改为另一种数据类型,以便使用Matplotlib进行打印?这是您想要的吗 for x in loglines: for i in x.split(','):
'str'
。
那么,如何将其更改为另一种数据类型,以便使用Matplotlib进行打印?这是您想要的吗
for x in loglines:
for i in x.split(','):
print(float(i)) if x != '' else print(0.0)
我的想法如下
- 打开文件
- 准备我们将要使用的对象-注意,我们不应该在一个绘图上绘制太多曲线
- 在循环中读取仪器,每次记录一次
- 将新记录附加到将在循环结束时处理的记录列表中,即当生成器返回时
- 将当前记录转换为浮动列表
- 绘制值
- 检查
对象中的线列表,如果太长(就我们的轴
而言),我们将从绘图中删除最早的线Nmax
import time
logfile = open(...)
logrecords = []
Nmax = 10 # ten is just a number, you have to see what is good for you
fig, ax = plt.subplots()
for record in follow(logfile):
logrecords.append(record)
try:
values = [float(tok) if tok else 0.0 for tok in record.split(',')]
except ValueError:
continue # read another record
ax.plot(values, label="%02d'%.2fs"%divmod(time.time()%3600, 60))
plt.legend()
if len(ax.lines) == Nmax : ax.lines[0].remove()
plt.pause(0.01)
请注意,我没有测试上述'cs'我没有您的数据,如果您发现我的代码有任何问题,我们可以在以后的评论交流中解决。Hi,感谢您的回复,但是,我收到了以下错误:
第55行,打印中(float(I))如果x!='else打印(0)值错误:无法将字符串转换为浮点:0.0 9012.0进程已完成,退出代码为1
@messymon数据(.csv文件)中可能有错误。Csv文件的数据按“,”分割,但ValueError表示存在“0.0 9012.0”数据。您好,非常感谢您回答这个问题,这个主意听起来不错!我试图将上面的代码放在脚本中,但出现了以下错误:File“C:/Users/ranic/.PyCharmCE2018.3/config/scratches/new_files/realtime1.py”,第39行,在value=[float(tok)for tok in record.split(',')中]ValueError:无法将字符串转换为浮点值:
是否因为字符串值无法转换为浮点值?谢谢您好,对不起,我刚刚意识到出现错误是因为.csv文件的前三行包含标题和字符串。此外,.csv文件的第三列是空的。字符串“,”上有一个双逗号,当我试图在csv上手动删除它时,上面的脚本可以工作。您可能知道如何不包含/读取前3列,以便不包括空白列吗?谢谢你可以使用尝试…除了…
构造,请参阅我的编辑我为双逗号问题添加了一个规定,当我们有一个空字符串时,我在转换的记录中放置了一个0,这可能是你想要的。你是一个完整的图例!!!我已经寻找解决方案好几个星期了。。。它工作得很好!非常感谢你!如果可以的话,我能再问一个问题吗?有没有办法让它更快地进入循环?你可能知道是否可以用动画来描绘人物吗?谢谢:)
for x in loglines:
for i in x.split(','):
print(float(i)) if x != '' else print(0.0)
import time
logfile = open(...)
logrecords = []
Nmax = 10 # ten is just a number, you have to see what is good for you
fig, ax = plt.subplots()
for record in follow(logfile):
logrecords.append(record)
try:
values = [float(tok) if tok else 0.0 for tok in record.split(',')]
except ValueError:
continue # read another record
ax.plot(values, label="%02d'%.2fs"%divmod(time.time()%3600, 60))
plt.legend()
if len(ax.lines) == Nmax : ax.lines[0].remove()
plt.pause(0.01)