【发布时间】:2019-11-28 09:39:20
【问题描述】:
我需要在python(准确地说是python3)中读取一个具有32位精度的整数值的.txt文件。
该文件是在 MATLAB 中使用以下命令创建的:
fwrite(fileID,array,'*int32')
当我在 MATLAB 中使用命令读取同一个文件时:
array = fread(fileID,'*int32')
整数确实是在数组变量中读取的。
但是,当我尝试在 Python Jupyter 笔记本中读取同一个文件时,我永远无法读取这些值。更具体地说,当我使用时:
file = open('path/file.TXT', 'r')
array = file.read()
我收到以下消息:
/usr/lib/python3.6/codecs.py 在 decode(self, input, final) 319 # 解码输入(考虑缓冲区)
320 个数据 = self.buffer + 输入
--> 321(结果,消耗)= self._buffer_decode(data, self.errors, final)
322 # 保留未解码的输入直到下一次调用
323 self.buffer = 数据[消耗:]
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1-2: invalid continuation byte
当我使用 numpy 中的加载函数时弹出相同的消息:
array = numpy.loadtxt('path/file.TXT', int)
我应该注意,当我尝试在 Ubuntu 中使用任何文本编辑器打开文件时,我看不到这些值。因此我只能在 MATLAB 中阅读它。我可以更改在 MATLAB 中创建文件的方式,因为这不是我必须做的部分。
如果需要,我可以提供文件。提前感谢大家的帮助!
【问题讨论】:
-
更好地导出 .mat - 文件,因为 Python 中的导入工作完美。为什么要使用专有的导出命令?
-
是否可以上传此文件以便我们进行检查?
-
@Impulsleistung 感谢您的回答,在 .mat 文件中导出数据对我来说很有效,如下所示。如果您愿意,可以将其发布为获得功劳的答案,因为我似乎无法参考您。
-
等等,这看起来像一个二进制文件,而不是文本
-
MATLAB 不使用您在上面给出的指令
fwrite(fileID,array,'*int32')写入 ASCII 数据。使用此指令,文件内的数据将始终是二进制的。如果您在打开文件时在文件句柄中指定了该文件的 名称(例如:fileID=fopen('something.txt','w') ;),则文件的 名称 可能以something.txt结尾。但这是错误的,您最好从一开始就创建具有正确扩展名的文件:fileID=fopen('something.bin','w') ;
标签: python-3.x matlab file jupyter-notebook precision