如何使用Python io模块构建memoryresident数据结构?

2024-04-25 09:53:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将从数据采集系统收集的数据写入内存中的位置,然后异步地对数据执行进一步的处理,或者将其写入文件进行脱机处理。我试图用这种方式来实现这种架构,将数据采集与数据分析和传输隔离开来,为我们将来的扩展和改进提供了一些灵活性,但这绝对比直接将数据写入文件要复杂得多。在

下面是我写的一些探索性代码。在

#io.BufferedRWPair test
from io import BufferedRWPair

# Samples of instrumentation data to be stored in RAM
test0 = {'Wed Aug  1 16:48:51 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
                    '1640', '240', '-13', '79.40']}
test1 = {'Wed Aug  1 17:06:48 2012': ['20.0000', '0.0000', '13.5', '75.62', '8190',
             '1640', '240', '-13', '79.40']}

# Attempt to create a RAM-resident object into which to read the data.
data = BufferedRWPair(' ', ' ', buffer_size=1024)

data.write(test0)
data.write(test1)

print data.getvalue()

data.close()

这里有几个问题(可能更多!)公司名称:

->;“data”是一个变量名,它提取了我正试图组装的一个构造(Python之外的结构),它是一个类似数组的结构,应该保存顺序记录,每个记录都包含多个过程数据度量,前面有一个时间戳,可以用作检索的键。我将此作为我设计意图的背景,以防代码过于模糊而无法反映我的真实问题。在

->此代码不起作用,因为未创建“data”对象。我只是试图打开一个空缓冲区,稍后再填充,但是Python正在寻找两个对象,一个可读,一个可写,它们在我的代码中不存在。因此,我甚至不确定我是否使用了正确的结构,这导致了以下问题:

  1. 是io.BufferedRWPair接口处理这些数据的最佳方法是什么?自从使用了python2.7.2之后,我就尝试过StringIO,但是没有运气。我喜欢一个带有时间戳键的记录的想法,因此我选择了dict结构,但我肯定会考虑其他方法。还有其他io类我应该看看吗?

  2. 我看到的另一种选择是在NumPy/SciPy/Pandas世界中定义的DataFrame构造。它看起来很有趣,但似乎需要很多额外的模块,所以我回避了。我对这些模块都没有经验——我应该看看这些更复杂的模块来获得我需要的东西吗?

我欢迎任何建议或反馈,伙计们。。。谢谢你回答这个问题!在


Tags: 模块文件to数据代码iodata记录
2条回答

编写一种机制来在内存中保存数据,并且只在必要时将其写入文件,这是多余的—操作系统无论如何都会为您完成这项工作。如果您使用普通文件并从应用程序的不同部分访问它,只要有足够的内存可用,操作系统就会将文件内容保存在磁盘缓存中。在

如果想通过内存地址访问文件,可以使用^{}模块对其进行内存映射。但是,我的印象是,您所需要的只是一个标准数据库,或者Python标准库提供的一个更简单的替代方案,例如^{}any^{}模块。在

根据您的注释,还可以查看像^{}^{}这样的键值存储。在

如果我理解您的要求,那么使用内存中的sqlite数据库可能是一种方法。Sqlite允许您在内存中完整地创建一个功能完整的SQL数据库。而不是读和写,你将做选择和插入。在

相关问题 更多 >