Syr*_*jor 6 python numpy file python-2.x fromfile
我最近遇到了对象的readinto方法file(在Python 2.7中),它类似于freadC语言.在某些情况下它似乎很方便和强大.我计划使用它将几个文件读入一个预先分配的numpy数组,而不复制数据.
例如
a = np.empty(N)
b = memoryview(a)
fp1.readinto(b[0:100])
fp2.readinto(b[100:200])
Run Code Online (Sandbox Code Playgroud)
和
fp1.readinto(b[0:100])
fp1.seek(400, 1)
fp1.readinto(b[100:200])
Run Code Online (Sandbox Code Playgroud)
我已经使用Cython并fread要做到这一点我见面之前readinto.所以我很高兴知道一个纯粹的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.
Run Code Online (Sandbox Code Playgroud)
不要用这个?发生了什么事?
所以我很困惑,我应该使用readinto与否?它可能导致任何不必要的问题?
是否有上述代码的替代实现,readinto但也避免数据复制?(避免复制意味着np.concatenate或np.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().
Run Code Online (Sandbox Code Playgroud)
的文档可以在这里io.RawIOBase.readinto找到。
io.RawIOBase 类
...
读入(b)
将最多 len(b) 个字节读取到字节数组 b 中并返回读取的字节数。如果对象处于非阻塞模式并且没有可用字节,则返回 None。
它在 Python 2 和 3 中都可用。
| 归档时间: |
|
| 查看次数: |
4453 次 |
| 最近记录: |