【发布时间】:2015-12-12 04:28:27
【问题描述】:
我正在尝试模拟使用 pandas 来访问不断变化的文件。
我有一个文件读取 csv 文件,向其中添加一行,然后随机休眠以模拟批量输入。
import pandas as pd
from time import sleep
import random
df2 = pd.DataFrame(data = [['test','trial']], index=None)
while True:
df = pd.read_csv('data.csv', header=None)
df.append(df2)
df.to_csv('data.csv', index=False)
sleep(random.uniform(0.025,0.3))
第二个文件通过输出数据框的形状来检查数据的变化:
import pandas as pd
while True:
df = pd.read_csv('data.csv', header=None, names=['Name','DATE'])
print(df.shape)
问题在于,当我得到正确形状的 DF 时,有时它会输出 (0x2)。
即:
...
(10x2)
(10x2)
...
(10x2)
(0x2)
(11x2)
(11x2)
...
这确实发生在一些,但不会发生在每个形状变化之间(文件添加到数据框)。
知道第一个脚本打开文件添加数据时会发生这种情况,而第二个脚本无法访问它,因此(0x2),这会发生任何数据丢失吗?
我不能直接访问流,只能访问输出文件。或者还有其他可能的解决方案吗?
编辑
这样做的目的是仅加载新数据(我有一个这样做的代码)并“即时”进行分析。一些分析将包括输出/秒、图形(类似于流图)和一些其他数值计算。
最大的问题是我只能访问 csv 文件,并且我需要能够在不丢失或延迟的情况下分析数据。
【问题讨论】:
-
目标本质上是什么?像看门狗这样检查文件更改的方法可能是更好的方法吗?
-
你也可以实现一个锁,这样一次只有一个进程可以打开文件,unix有多种方法可以做到这一点stackoverflow.com/questions/29520587/…。一个进程读取另一个进程可能不会丢失任何数据,但如果您使用数据测试更改,您将得到不正确的输出
-
看门狗似乎是一个有趣的工具,但不是我想要的。我编辑了我的问题以解释更多。
-
当流媒体尚未完成数据写入时,“阅读器”[您的代码]似乎正在访问 csv 文件。这是一个种族问题。