Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python上打印从CSV流获取的字符串值_Python_Python 3.x_String_Matplotlib_Seek - Fatal编程技术网

在Python上打印从CSV流获取的字符串值

在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(','):

我没有很强的Python和编程背景,目前我一直在绘制从csv流中获取的数据/值

目前,这就是我必须打印从.csv(传感器实时数据)流式传输的值,我从以下位置获取:

通过运行上面的脚本,我得到了这样的值行(这里是多行中的两行的示例):

我想绘制每行(每行1个绘图)。然而,我意识到这些值被指示为
'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)