【发布时间】:2019-04-10 00:37:33
【问题描述】:
这是一个问题,但我也只是希望我不必编写一堆代码来获得我想要的行为。 (另外,如果它已经存在,它的运行速度可能比我写的要快。)我有许多无法放入内存的大型数字列表——至少不是同时存在的。这很好,因为我一次只需要每个列表的一小部分,而且我知道如何将列表保存到文件中并读出我需要的列表部分。问题是我这样做的方法有些低效,因为它涉及遍历文件以获得我想要的部分。所以,我想知道是否碰巧有一些库或我没有找到的东西允许我使用我熟悉的[] 表示法来索引文件,就好像它是一个列表一样。由于我自己编写文件,因此我可以根据需要对它们进行格式化,但目前我的文件只包含列表中的元素,\n 作为值之间的分隔符。
只是为了回顾一下我在寻找什么/让它更具体。
- 我想使用列表索引表示法(包括切片为子列表和负索引)来访问写入文件中的列表的内容
- 被访问的子列表(例如
f[1:3])应该在内存中作为python列表对象返回 - 我希望能够分配给文件的索引(例如
f[i] = x应该将值x写入文件f对应于索引i的位置)
老实说,我不希望这种情况存在,但你永远不知道什么时候会错过研究中的某些内容。所以,我想我会问。附带说明,如果这不存在,是否可以在 python 中重载[] 运算符?
【问题讨论】:
-
您可以通过定义
__getitem__来重载[]运算符。另外,当您说“索引”时,您的意思是“文件中的位置”(而不是行号),对吧? -
作为高效的最低要求,您需要编写具有固定帧长度的记录,以允许利用
seek定位您想要的项目,而无需考虑可变的行长度 -
@gmds 通过索引,我的意思是存储在文件中的列表中的位置。目前对我来说意味着行号,因为这是分隔列表元素的原因,但我目前在想我想做 donkopotamus 建议的固定帧长度(这意味着我应该切换到二进制文件?),但我对“文件中的位置”是我所在的精确字符/字节,这不是我想要的,因为每个帧都跨越多个字节。我想我想做的是使用
seek和struct使用c 类型格式读取/写入文件,但我需要做更多的研究才能确定。