7

我最近遇到了object 的readinto方法file(在 Python 2.7 中),它类似于freadC 中的方法。在某些情况下它似乎很方便和强大。我打算用它来将多个文件读入一个预先分配的 numpy 数组,而无需复制数据

例如

a = np.empty(N)
b = memoryview(a)
fp1.readinto(b[0:100])
fp2.readinto(b[100:200])

fp1.readinto(b[0:100])
fp1.seek(400, 1)
fp1.readinto(b[100:200])

在遇到. Cython_ 所以我很高兴知道一个纯python的解决方案。freadreadinto

但是它的文档字符串说,

file.readinto?
Type:        method_descriptor
String form: <method 'readinto' of 'file' objects>
Namespace:   Python builtin
Docstring:   readinto() -> Undocumented.  Don't use this; it may go away.

不要用这个?发生了什么事?

所以我很困惑,我应该使用readinto还是不使用?它可能会导致任何不必要的问题?

上面的代码是否有任何替代实现,readinto但也避免数据复制?(避免复制意味着np.concatenatenp.stack不是一个好的选择。)

欢迎任何建议!谢谢你。

--------更新-----

看来我可以io.FileIO在标准库中使用而不是内置函数open。看起来不错,所以我将其发布为答案。

仍然欢迎任何评论或其他解决方案!

--------更新-----

如果您遇到同样的问题,您可能想看看下面
Andrea Corbellini 和 Padraic Cunningham 的评论。

4

1 回答 1

4

您可以io.FileIO在 python 标准库中使用而不是内置函数,open或者file,如果您不确定是否使用file.readinto.

这是文档字符串:

#io.FileIO.readinto?
Type:        method_descriptor
String form: <method 'readinto' of '_io.FileIO' objects>
Docstring:   readinto() -> Same as RawIOBase.readinto().

的文档io.RawIOBase.readinto可以在这里找到。

io.RawIOBase 类

...

读入(b)

将最多 len(b) 个字节读入 bytearray b 并返回读取的字节数。如果对象处于非阻塞模式并且没有可用的字节,则返回 None。

它在 Python 2 和 3 中都可用。

于 2016-01-13T15:48:00.197 回答