Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 2中使用带有numpy fromfile/tofile的新io类(将io类转换为文件对象)_Python_Numpy_File Io - Fatal编程技术网

在Python 2中使用带有numpy fromfile/tofile的新io类(将io类转换为文件对象)

在Python 2中使用带有numpy fromfile/tofile的新io类(将io类转换为文件对象),python,numpy,file-io,Python,Numpy,File Io,函数numpy.fromfile和ndarray.tofile除了接受文件名外,还接受文件对象。如果数据不在文件开头或有其他特殊要求,则使用文件对象非常重要 在内部,这些函数使用FILE*直接完成它们的工作 在Python 2中,他们使用PyFile\u AsFile来获取文件*。这意味着文件对象必须是真正的文件对象,而不是与其共享接口的对象(请参阅) 在Python3中,由于PyFile\u AsFile和file对象消失了,它们不得不求助于接受类似文件的对象,并将处理任何具有fileno、f

函数
numpy.fromfile
ndarray.tofile
除了接受文件名外,还接受文件对象。如果数据不在文件开头或有其他特殊要求,则使用文件对象非常重要

在内部,这些函数使用
FILE*
直接完成它们的工作

在Python 2中,他们使用
PyFile\u AsFile
来获取
文件*
。这意味着文件对象必须是真正的
文件
对象,而不是与其共享接口的对象(请参阅)

在Python3中,由于
PyFile\u AsFile
file
对象消失了,它们不得不求助于接受类似文件的对象,并将处理任何具有
fileno
flush
tell
seek
的对象(请参阅)

接下来的问题是,如何从文件/
到文件
使用Python2和
io
对象(假设它们实际支持
fileno()
)获取
。最好是numpy v1.7+

到目前为止,我的想法是:

  • 使用
    os.dup
    os.fdopen
    等从
    io
    对象创建新的
    文件
    对象。然而,这也有一些问题,因为它需要特别关闭(比如在numpy的Python3 npy_PyFile_Dup2中),以防止Python的内部缓冲出现问题,而且我并不完全理解Python和底层
    文件*
    句柄之间的所有交互。此外,这意味着需要调用一个特殊函数来关闭此特殊对象,并且需要将数据(如原始位置)传输到关闭函数
  • 使用Cython从
    io
    类获取FILE*对象,并直接调用C函数/从FILE
/
到FILE
创建一个备用
文件。这就需要Cython并假设从
io
类获取
文件*
  • 与上面相同,但使用
    ctypes
    。有点难看,但不需要Cython
  • 在这些方法中,哪一种是最好的方法?对于第一个问题,如何正确处理所有Python/底层文件IO问题?对于最后两个问题,如何正确地从
    io
    类获取
    文件*