我最近遇到了readinto对象的file方法(在python 2.7中),它类似于C语言中的fread。在某些情况下,它似乎很方便而且功能强大。我打算用它来将多个文件读入一个预先分配的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之前,我已经使用freadreadinto进行了此操作。因此,我很高兴知道一个纯Python解决方案。

但是它的文档字符串说,
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并不是一个很好的选择。)

任何建议都欢迎!谢谢你。

------- upate -------

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

任何意见或其他解决方案仍然欢迎!

------- upate -------

如果您遇到相同的问题,则可能需要查看以下评论​​,网址为:
Andrea Corbellini和Padraic Cunningham。

最佳答案

如果不确定io.FileIO,则可以在python标准库中使用open而不是内置函数filefile.readinto
这是文档字符串:

#io.FileIO.readinto?
Type:        method_descriptor
String form: <method 'readinto' of '_io.FileIO' objects>
Docstring:   readinto() -> Same as RawIOBase.readinto().
io.RawIOBase.readinto的文档可以在here中找到。

它在Python 2和3中都可用。

10-07 17:09