1

Python を使用して、C で記述されたバイナリ ファイルを HDF5 ファイルとの間で変換しようとしています。バイナリ ファイルを読み取るには、Python は次のように動作します。

pos=np.fromfile(f, count=npt*3, dtype='f4').reshape((npt, 3))

私が試したのと同じことを書くために、array.tofile() 成功せず、今はそのような ctypes を使用しようとしています (Web で見つかったさまざまな回答をつなぎ合わせています):

import ctypes as c

print "Loading C libraries with ctype"
libc = c.CDLL("libc.so.6") # Linux

# fopen()
libc.fopen.restype = c.c_void_p
def errcheck(res, func, args):
    if not res: raise IOError
    return res

libc.fopen.errcheck = errcheck
# errcheck() could be similarly defined for `fwrite`, `fclose` 

c_int_p = c.POINTER(c.c_int)
c_float_p = c.POINTER(c.c_float)
c_double_p = c.POINTER(c.c_double)


def c_write(data, f, numpy_type, c_type_p, nbyte, count):
    data = data.astype(numpy_type)
    data_p = data.ctypes.data_as(c_type_p)
    nitems  = libc.fwrite(data_p, nbyte, count, f)
    if nitems != data.size: # not all data were written
        print "Not all data were written, exit..."
        sys.exit()


c_write(pos, f, np.int32, c_int_p, 4, npart.size)
4

1 に答える 1

3

おそらくモジュールを調べる必要がありstructます。これは、バイトごとの最低レベルでデータをパックおよびアンパックするのに最適です。

于 2012-10-08T13:25:23.373 に答える