gpt4 book ai didi

Python fromfile 在读取使用 tofile 生成的二进制文件时返回不正确的值

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:09 25 4
gpt4 key购买 nike

我发现了几个类似的问题,但没有一个能准确描述我面临的问题。我有一个 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 完成这项工作),第一个值是正确的,但随后读取的值不正确。在一些不正确的值被再次读取后,正确的值被再次读取,但它们似乎被移动了(例如,当使用 vector-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。有过去有人遇到过类似的问题吗?

谢谢。

最佳答案

很可能,错误出在您没有显示的代码中。 extract_verts()out_file 参数似乎是一个打开的文件对象,以二进制模式打开此文件很重要:

out_file = open("out.dat", "wb")

文件默认以文本模式打开。在 Windows 上,这意味着会发生自动换行符处理:所有出现的字节 '\n' 都将替换为 '\r\n'。这就是为什么直到 '\n' 第一次出现的所有值都是正确的。

关于Python fromfile 在读取使用 tofile 生成的二进制文件时返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com