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

ctehm74n  于 12个月前  发布在  Python
关注(0)|答案(4)|浏览(124)

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

crcmnpdw

crcmnpdw1#

你也可以使用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

tjjdgumg

tjjdgumg2#

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

svdrlsy4

svdrlsy43#

你也可以在Numpy/Matplotlib上使用Python。这是一个简单的方法来流你的csv数据temporay作为一个变量,而不是一个额外的文件。

´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)´
eiee3dmh

eiee3dmh4#

它在fastapi中工作,用于将数据流传输到用户界面。

from starlette.responses import StreamingResponse
from io import BytesIO

temp_file_name = 'test.csv'
with open(temp_file_name, 'rb') as fh:
    buffered_data = BytesIO(fh.read())
    response = StreamingResponse(buffered_data, media_type="text/csv")
    response.headers["Content-Disposition"] = f"attachment; filename=filename.csv"
    return response

相关问题