我有一个应用程序,我需要测量每个设备的基于时间戳的参数值。信息结构严密,我没有查看数据库的原因是因为我必须每隔几分钟获得100 x 1000 = 100k行的所有数据。我想删除与每个组中最早的时间戳对应的数据。我正在使用Python进行编程,但即使是JavaScript也可以。我在Python CSV官方模块中找不到limit参数。非常感谢帮助。
Item 1
Timestamp, parameter1, parameter2...parameterN
...
100 rows
Item 2
Timestamp, parameter1, parameter2...parameterN
...
100 rows
...1000 items
注意:没有用于分隔任何行的标题,显示项目1,2等用于表示目的。
我需要能够在每个组下每隔几分钟添加一个新行,并有效地删除旧行,有效地保持每组100个数字
答案 0 :(得分:1)
没有limit
参数,因为读者只是一个迭代器,Python有通用的方法可以做任何你想对任何迭代器做的事情。
with open(path) as f:
r = csv.reader(f)
前100:
itertools.islice(r, 100)
最后100:
collections.deque(r, maxlen=100)
第3栏最多100个:
heapq.nlargest(100, r, key=operator.itemgetter(2))
......等等。
答案 1 :(得分:1)
像这样在内部存储您的数据
dict [key] [timestamp] [值数组]
data={}
if 'bob' in data:
data['bob']={}
data['bob'][timestamp]=list(values)
else:
data['bob'][new_timestamp]=list(values)
经过2次迭代后,您的数据数组将显示为
data['bob'][15000021][1,2,3,4,5]
data['bob'][15003621][5,6,7,8,9,0]
如果您想要最新的...只需获取bob的唯一键 - 并删除
- either anything more than n items (bob's values sorted by timestamp)
- or if the timestamp is less than now() - 2 days [or whatever your rule]
我在类似的数据集中使用这两种机制。我强烈建议您保存这些数据,以防您的流程存在。
如果您的数据包含OrderedDictionary(这将使删除更容易) - 请不要pickle将失败,但优秀的模块 dill (我不是开玩笑)非常好,并处理所有数据类型和关闭更好的恕我直言。
答案 2 :(得分:1)
**从评论**移动
我假设从下往上阅读文件可以帮助你...这可以通过将条目添加到文件开头来完成。
有了这个假设,你只需要在每个条目上重写文件。将新文件读入数组,push()
新条目shift()
列表并写入新文件。
或者,您可以继续push()
到该文件,只读取前100个条目。在您阅读之后,如果您希望在读取之间始终获得超过100个条目,则可以删除该文件并启动一个新文件,或者您可以将文件清理为仅100个条目