【问题标题】:Reading txt file with integers of 32 bit precision in python在python中读取具有32位精度整数的txt文件
【发布时间】: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


【解决方案1】:

@Impulsleistung 根据您的建议,我将 MATLAB 中的文件导出为 .mat 文件,并使用以下代码获取所需的数据:

data = scipy.io.loadmat('path/data.mat')
array = data.get('array')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多