繁体   English   中英

使用Python / Cython编写二进制文件的更快方法

[英]Faster way to write binary file with Python/Cython

我检查了两种使用Python / Cython读取二进制文件的方法:

第一个是使用mmap和struct.unpack模块:

import mmap

import os
import struct

fd = os.open(filePath, os.O_RDONLY)
mmap_file = mmap.mmap(fd, length=24, access=mmap.ACCESS_READ, offset=0)
Xmin = struct.unpack("i", mmap_file[:4])[0]
Xmax = Xmin + struct.unpack("i", mmap_file[12:16])[0]
Ymax = struct.unpack("i", mmap_file[4:8])[0]
Ymin = Ymax - struct.unpack("i", mmap_file[16:20])[0]
Zmax = struct.unpack("1f", mmap_file[8:12])[0]

第二个使用mmap和from_buffer:

class StructHeaderLID(Structure):
    _fields_ = [('Xmin', c_int),('Ymax', c_int),('Zmax', c_float),('tileX', c_int),('tileY', c_int)]

    d_array = StructHeaderLID*1

    fd = os.open(filePath, os.O_RDWR)
    mmap_file = mmap.mmap(fd, length=24, access=mmap.ACCESS_WRITE, offset=0)
    data = d_array.from_buffer(mmap_file)
    for i in data:
        Xmin = i.Xmin
        Xmax = Xmin + i.tileX
        Ymax = i.Ymax
        Ymin = Ymax - i.tileY
        Zmax = i.Zmax

我发现第二个更快。

我要解决的问题是写入新二进制文件的最快方法。 我知道如何用struct.pack编写它:

f = open(filePath, 'wb')
line = struct.pack("i", 500000)+struct.pack("i", 4000000)
f.write(line)
f.close()

但是我想知道是否有更快的方法(或者类似于mmap + from_buffer的东西,但是用于写)。

谢谢。

巴勃罗。

其中最快的方法是使用NumPy。 创建一个数组并将其直接写入文件,或使用其memmap()函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM