当读取由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。有人过去遇到过类似的问题? 谢谢。     
已邀请:
        错误很可能出在您未显示的代码中。
extract_verts()
out_file
参数似乎是一个打开的文件对象,以二进制模式打开此文件很重要:
out_file = open(\"out.dat\", \"wb\")
默认情况下,文件以文本模式打开。在Windows上,这意味着将进行自动换行处理:将所有出现的字节
\'\\n\'
替换为
\'\\r\\n\'
。这就是直到第一次出现“ 5”的所有值都是正确的原因。     

要回复问题请先登录注册