从 CSV 文件到 Python 的实时数据流

Posted

技术标签:

【中文标题】从 CSV 文件到 Python 的实时数据流【英文标题】:Realtime data stream to Python from CSV file 【发布时间】:2017-06-01 22:58:54 【问题描述】:

我有一个 CSV 文件,其中包含在几分钟内记录的随机传感器的数据。 现在我想将该数据从 CSV 文件流式传输到我的 python 代码,就好像它直接从传感器本身接收数据一样。 (代码用于从两个不同的传感器/csv 文件中获取读数并将它们平均。) 有人建议使用 Apache Spark 来流式传输数据,但我觉得这对我来说有点太复杂了。有没有更简单的解决方案?

【问题讨论】:

你不能一行一行地读吗? (并且可选在读取一行之间添加一点延迟) 您是想模拟传感器接口还是只关心数据?你需要在读取之间有延迟吗?数据是否带有时间戳,以便您可以在需要时计算延迟? @Olian04 也许我可以这样做。我对编程很陌生,对所有这些东西一无所知。我为听起来很愚蠢而道歉。但是我是否需要在阅读两行之间延迟一些时间才能产生真正的效果? @M.Ali 不一定。如果读取之间的时间无关紧要,那么您可以像读取任何其他文件一样读取它。 ***.com/a/6556862/1548275有答案 【参考方案1】:

你可以在 python 中使用类似tail -f 的东西来实现这一点。这应该做你想做的。 http://lethain.com/tailing-in-python/

【讨论】:

是否可以制作一个虚拟串口设备并通过它传输数据?我的意思是最终我将如何连接传感器,那为什么不按照那个来编码呢? 不知道,但可能?似乎比仅仅读取 csv 文件更复杂,除非你想翻转它并让 python 直接与传感器接口并且让 python 进程也存储 csv 数据。【参考方案2】:

你也可以使用pandas read_csv()函数来读取大的csv文件,基本代码如下:

import pandas as pd
chunksize = 100
for chunk in pd.read_csv('myfile.csv', chunksize=chunksize):
    print(chunk)

此链接解释了它的工作原理: http://pandas.pydata.org/pandas-docs/stable/io.html#io-chunking

【讨论】:

【参考方案3】:

您还可以在 Numpy/Matplotlib 上使用 Python。这是一种将 csv 数据临时作为变量而不是额外文件流式传输的简单方法。

´import matplotlib.pyplot as plt
 from matplotlib import style 
 import numpy as np
 import io

def draw_graph_stream(csv_content):

csv_stream = io.StringIO(csv_content)
svg_stream = io.StringIO()

data =  np.genfromtxt(csv_stream, delimiter = ';')          # generate the stream

x = data[0,:]                           #first row in csv 
y = np.mean(data[1:,:], axis=0)  # first column with mean generate the average           

plt.plot(x,y)
plt.savefig(svg_stream, format = 'svg')     #just safe it as svg 

svg_stream.seek(0)           #Position 0 for reading after writing 
return svg_stream.read()

print("Start test")

with io.open('/filepathtodata','r') as csv_file:   #works like a Loop 
    print("Reading file")
    csv_content = csv_file.read()
    print("Drawing graph")
    svg_content = draw_graph_stream(csv_content)

    with io.open('thefilepathforsafe','w+') as svg_file:
        print("Write back")
        svg_file.write(svg_content)´

【讨论】:

以上是关于从 CSV 文件到 Python 的实时数据流的主要内容,如果未能解决你的问题,请参考以下文章

将实时数据从运动捕捉系统写入 CSV 文件?

如何将 Firebase 实时数据库导出为 CSV?

python的实时检查器csv

读取并绘制实时实时自我更新 csv 文件

二.Flink实时项目电商用户行为之实时流量统计

如何将实时坐标从位置文件发送到python中的不同文件?