10

我有一个大文件(4+ gigs),可以说是 4 字节浮点数。我想将其视为列表,从某种意义上说,我希望能够使用 map、filter、foldl 等。但是,我不想用输出生成一个新列表,而是想将输出写回文件,因此只需将文件的一小部分加载到内存中。你可以说我是什么类型的 MutableFileList

有没有人遇到过这种情况?我没有重新发明轮子,而是想知道是否有一种 Hackish 方法来处理这个问题?

4

3 回答 3

13

您不应将其视为内存中的[Double][Float]。您可以做的是使用类似列表的打包数组类型之一,例如 uvector/vector/... 与 mmapFile 或 readFile 一起使用,一次提取文件的块并处理它们。或者使用惰性打包数组类型,相当于惰性字节串。

于 2009-12-18T01:52:36.927 回答
9

应该对你很有帮助。你可以用readFileandwriteFile来做你需要做的事情,一切都是懒惰的。它只会在仍在使用时将内容保存在内存中,因此您可以读取、处理和写入文件而不会损坏计算机。

于 2009-12-18T01:27:19.490 回答
1

您可以使用mmap将文件映射到内存然后处理它。有一个mmap 模块可以读取和写入 mmaped 文件,甚至可以处理延迟映射的文件块,但我还没有尝试过。

写入映射文件的接口似乎相当低级,因此您必须构建自己的抽象或使用Foreign.Ptr等等。

于 2009-12-18T01:22:37.163 回答