我发现了几个类似的问题,但没有一个完全描述我面临的问题。我有一个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(脚本是由同事创建的),但我使用的是Windows 7.有人在过去遇到过类似的问题吗?
感谢。
答案 0 :(得分:1)
最有可能的是,错误出现在您不会显示的代码中。 out_file
extract_verts()
参数似乎是一个打开的文件对象,以二进制模式打开此文件非常重要:
out_file = open("out.dat", "wb")
默认情况下,文件以文本模式打开。在Windows上,这意味着会发生自动换行:字节'\n'
的所有出现都被'\r\n'
替换。这就是为什么直到'\n'
第一次出现的所有值都是正确的。