当读取由tofile生成的二进制文件时,Python fromfile返回不正确的值
||
我发现了几个类似的问题,但没有一个问题能准确描述我所面临的问题。我有一个OBJ文件,其中包含描述顶点位置的行:
v 0.01214 0.4242 0.82874
我想将这些数据转换为对matlab友好的格式,以便可以使用从其他文件获得的这些值和其他值来绘制一些数据。我正在使用python(和numpy)将此数据转换为二进制文件,因此我使用以下功能:
def extract_verts(in_file, out_file):
v = np.zeros(3, np.float32)
for line in in_file:
words = line.split()
if words[0] == \'v\':
v[:] = [np.float32(s) for s in words[1:4]]
print v[:]
v.tofile(out_file)
问题是,当我使用matlab读取它(fread会完成工作)时,第一个值是正确的,但随后读取的值不正确。在一些不正确的值之后,将再次读取正确的值,但是它们似乎已移位(例如,当使用矢量3结构时,x分量显示为y分量)。后来,它再次发生并且不正确,然后读取了正确但移位的值,依此类推。我已经检查了文件是否已正确读取,因为我可以看到打印行中的读取值。
我试图用python读取文件,以防万一这是matlab问题:
data = np.fromfile(\'file.dat\', np.float32)
i = 0
while i < 100:
print data[i]
i = i+1
并发生完全相同的结果(即使错误的值也相同)。
我认为这可能与字节顺序或与操作系统有关的问题有关,因为我使用的这组脚本在MacOS上有效(脚本是由同事创建的),但是我在使用Windows7。有人过去遇到过类似的问题?
谢谢。
没有找到相关结果
已邀请:
1 个回复
社攻取墟槽
的
参数似乎是一个打开的文件对象,以二进制模式打开此文件很重要:
默认情况下,文件以文本模式打开。在Windows上,这意味着将进行自动换行处理:将所有出现的字节
替换为
。这就是直到第一次出现“ 5”的所有值都是正确的原因。