我正在尝试使用以下命令读取二进制文件:
import numpy as np
fid = open(filename, 'rb')
ax = np.fromfile(fid, dtype=np.int32, count=1)
此命令工作正常,但
ay = np.fromfile(fid, dtype=np.char, count=16)
给出了一个TypeError:数据类型不被理解。知道如何将其作为字符类型阅读?
答案 0 :(得分:2)
您所需的数据类型不存在,np.char
实际上是a module。
看看numpy
datatypes,您可以使用np.byte
来覆盖您的字节表示,这是np.int8
。
答案 1 :(得分:1)
你应该使用
ay = np.fromfile(fid, dtype=np.char, count=16)
而不是
numpy
因为char
不包含标量类型numpy
。有关numpy.byte
数据类型的更多信息,请参阅here。 C char
类型对应int
类型
如果要将16位二进制数字的数组转换为一个aybin = np.fromfile(fid, dtype=np.char, count=16)
ay = int(("".join(str(d) for d in aybin)), 2)
,可以使用以下代码:
{
"content-length"=>["0"],
"server"=>["Microsoft-IIS/8.0"],
"request-id"=>["183391ab-9f6b-4828-b8bc-3fd47f7c5d9f"],
"set-cookie"=>["ClientId=VMHPFWYG0GTCMMSGARF0A; expires=Sat, 16-Jul-2016 11:50:14 GMT; path=/; secure; HttpOnly"],
"x-calculatedbetarget"=>["BN1PR04MB469.namprd04.prod.outlook.com"],
"x-backendhttpstatus"=>["404"],
"x-diaginfo"=>["BN1PR04MB469"],
"x-beserver"=>["BN1PR04MB469"],
"x-powered-by"=>["ASP.NET"],
"x-feserver"=>["BLUPR16CA0002"],
"date"=>["Fri, 17 Jul 2015 11:50:15 GMT"]
}
答案 2 :(得分:0)
所以,在我通过评论看到你的沟通后,我更新了我的答案如下:
在您的情况下,您应该使用:
ay = np.fromfile(fid, dtype=np.byte, count=16)
但是,我在此处留下我之前回答的部分内容,以考虑在其他特定情况下使用。
尝试numpy.loadtxt()
。
从文本文件加载数据的更灵活方式。
但是如果你甚至使用numpy.fromfile()
,那么你必须使用arg sep
,因为空(“”)分隔符意味着该文件应该被视为二进制。
正如您可以在numpy手册中阅读here:
sep:str
如果文件是文本文件,则在项目之间分隔。空(“”)分隔符表示该文件应被视为二进制文件。分隔符中的空格(“”)匹配零个或多个空白字符。仅由空格组成的分隔符必须至少匹配一个空格。