You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy.fromfile读取固定宽度二进制文件时如何直接加载为字符串类型

实现方法

你不需要逐行读取转换,只需要调整自定义dtype里字符串字段的类型定义,就能让np.fromfile直接把定长8字节字段识别为字符串类型,且完全不增加读取开销、不会出现字段偏移错误:

  • 把原来字符串字段的np.byte, 8替换为'S8'即可,S是numpy定长字节串的类型标识,后面跟的数字代表字段占用的字节长度,和你文件里的8字节定长字符串存储完全匹配:
import numpy as np
# 定义匹配存储结构的dtype
myDatatype = np.dtype([
    ('mynumber', np.int32),
    ('mystring', 'S8')
])
# 执行读取
data = np.fromfile(f, myDatatype)

读取完成后,data['mystring']会直接返回定长字节串数组,而不是原来的int8数值数组。如果需要转为Python常用的Unicode字符串,可以批量做一次解码,操作是向量化的,速度远快于逐行处理:

# 按你的文本实际编码替换encoding参数,常用编码为ascii/utf-8/gbk
data['mystring'] = np.char.decode(data['mystring'], encoding='utf-8')

注意:不要直接使用'U8'(定长Unicode类型)定义字段,U类型每个字符占4字节,U8总长度为32字节,会和你文件里8字节的存储长度不匹配,导致所有字段读取错位。

你可以通过myDatatype.itemsize验证结构对齐性:上述定义的dtype单条记录长度为4+8=12字节,和你文件里重复单元的长度完全一致,不会出现读取错位问题。

内容的提问来源于stack exchange,提问作者Stein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:00:10