从 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 的实时数据流的主要内容,如果未能解决你的问题,请参考以下文章