我应该使用python文件的`readinto`方法吗?

时间:2016-01-13 14:15:05

标签: python file numpy python-2.x fromfile

我最近遇到了readinto对象的file方法(在Python 2.7中),它类似于C中的fread。在某些情况下似乎方便而强大。我打算用它将几个文件读入一个预分配的numpy数组,不复制数据

e.g。

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。

1 个答案:

答案 0 :(得分:3)

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

这是docstring:

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

可以找到io.RawIOBase.readinto的文档here

  

class io.RawIOBase

     

...

     

readinto(b)中

     

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

它可以在Python 2和3中使用。