首页 > 解决方案 > 我可以将文件视为python中的列表吗?

问题描述

这是一个问题,但我也只是希望我不必编写一堆代码来获得我想要的行为。(另外,如果它已经存在,它的运行速度可能比我写的要快。)我有许多无法放入内存的大型数字列表——至少不是同时存在的。这很好,因为我一次只需要每个列表的一小部分,而且我知道如何将列表保存到文件中并读出我需要的列表部分。问题是我这样做的方法有些低效,因为它涉及遍历文件以获得我想要的部分。所以,我想知道是否碰巧有一些库或我没有找到的东西允许我索引一个文件,就好像它是一个使用列表的列表[]我熟悉的符号。由于我自己编写文件,因此我可以根据需要对它们进行格式化,但目前我的文件只包含列表的元素,并\n作为值之间的分隔符。

只是为了回顾一下我在寻找什么/让它更具体。

  1. 我想使用列表索引表示法(包括切片到子列表和负索引)来访问写入文件的列表的内容
  2. 访问的子列表(例如f[1:3])应该作为内存中的 python 列表对象返回
  3. 我希望能够分配给文件的索引(例如f[i] = x,应该将值写入与 index 对应的位置x的文件)fi

老实说,我不希望这种情况存在,但你永远不知道什么时候你会错过研究中的某些东西。所以,我想我会问。附带说明一下,如果这不存在,是否可以[]在 python 中重载运算符?

标签: pythonlistfile

解决方案


如果您的数据是纯数字的,您可以考虑使用numpy数组,并以npy格式存储数据。以这种格式存储后,您可以将内存映射文件加载为:

>>> X = np.load("some-file.npy", mmap_mode="r")
>>> X[1000:1003]
memmap([4, 5, 6])

此访问将直接从磁盘加载,无需加载前导数据。


推荐阅读