如何使用python将字符和整数写入指定精度的二进制文件?



我最初的想法是写一个python版本的这个MATLAB函数cmp2pal。我想使用python的colormap并将其转换为可以在origin中使用的pal文件我不想打开我的matlab。函数最重要的部分如下:

    %% Open file
    fid=fopen(path,'w',mf);
    if(fid<0)
        throw(MException('cmap2pal:Open','Error opening file (%s) for writing',path));
    end
    %% Write RIFF signature
    fwrite(fid,'RIFF','uint8',0,mf);
    
    %% Write file length
    fwrite(fid,flen-8,'uint32',0,mf);                               % 8 byte header (RIFF header)
    
    %% Write PAL signature
    fwrite(fid,'PAL ','uint8',0,mf);
    
    %% Write data signature
    fwrite(fid,'data','uint8',0,mf);
    
    %% Write data block size
    fwrite(fid,flen-20,'uint32',0,mf);                              % 20 byte header (RIFF + Chunk)
    
    %% Write version number
    fwrite(fid,[0,3],'uint8',0,mf);                                 % Always 3
    
    %% Write palette length
    fwrite(fid,depth,'uint16',0,mf);
    
    %% Write palette data
    fwrite(fid,[cmap.*255,zeros(depth,1)]','uint8',0,mf);           % RGBA tuples
    
    %% Close file
    fclose(fid);

我搜索了解决方案,但我仍然不明白如何将字符或字符串保存为二进制格式(具有精度的无符号整数)。谁能给我这个函数的正确python版本?我使用了struct模块,但有错误:

# %%
import struct
newFileBytes = 'RIFF'
# make file
newFile = open("testpython.txt", "wb")
# write to file
# newFile.write(newFileBytes)

newFile.write(struct.pack('4B', *newFileBytes))
# %%

错误信息

----> 10 newFile.write(struct.pack('4B', *newFileBytes))
error: required argument is not an integer

你有字符串

newFileBytes = 'RIFF'

但是你需要字节

newFileBytes = b'RIFF'

然后就可以了

struct.pack('4B', *newFileBytes)

但是如果你有字节,你可以直接写入文件

newFile.write(b'RIFF')

如果你想把它保持为字符串,那么使用encode来获得bytes

newFileBytes = 'RIFF'.encode()
newFile.write( 'RIFF'.encode() )

相关内容

  • 没有找到相关文章

最新更新