gpt4 book ai didi

python - 如何模拟 numpy.fromfile?

转载 作者:行者123 更新时间:2023-11-28 18:52:06 24 4
gpt4 key购买 nike

我正在尝试向 numpy.fromfile 传递一个模拟的 file,但我不断收到以下错误:

IOError: !first argument must be an open file

这是一个基本示例,使用从 Further Example 中获取的 mock_open模拟包部分:

import numpy as np
from mock import MagicMock, patch

file_spec = file

def mock_open(mock=None, data=None):
if mock is None:
mock = MagicMock(spec=file_spec)

handle = MagicMock(spec=file_spec)
handle.write.return_value = None
if data is None:
handle.__enter__.return_value = handle
else:
handle.__enter__.return_value = data
mock.return_value = handle
return mock


if __name__ == "__main__":
m = mock_open()
with patch('__main__.open', m, create=True):
with open('foo', 'rb') as h:
print h.mock_calls
try:
result = np.fromfile(h)
except IOError:
print "io error!"
print h.mock_calls

导致:

% [call.__enter__()] 
% io error!
% [call.__enter__()]

我可以模拟 numpy.fromfile,这可能就是我最终要做的。我无法理解以下内容

  1. 为什么上面的例子不起作用
  2. 为什么我在调试 fromfile 时遇到问题(通过在 fromfile 之前调用 pdb.set_trace() 并进入 fromfile。调试器似乎无论如何都会跳过调用。
  3. 为什么我在numpy 源代码中找不到fromfile。这样的函数存在于numpy/numarray/functions.pynumpy/core/records.pynumpy/ma/core.py中,但这些都不会像上面列出的那样引发错误。

非常感谢任何澄清上述问题的帮助。顺便说一下,我使用的是 numpy 1.6.1 版。

最佳答案

我不确定为什么你的模拟 open() 不工作,但由于你立即调用你自己的模拟,你有一个更简单的选择:用 StringIO 创建一个文件,然后手到 numpy.fromfile。

问题 2 和 3 可能是由于 numpy.fromfile 是用 C 编写的。

关于python - 如何模拟 numpy.fromfile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com