【问题标题】:How to read the _io.TextIOWrapper data?如何读取 _io.TextIOWrapper 数据?
【发布时间】:2020-04-03 07:02:06
【问题描述】:

我正在尝试使用 f1= open('rec_1.dat') 打开一个 .dat 文件,我得到 <_io.textiowrapper name="rec_1.dat" mode="r" encoding="cp1252">。然后我将指令更改为f1= open('rec_1.dat', encoding = 'cp1252),我收到以下错误'charmap' codec can't decode byte 0x81 in position 1396: character maps to .

如果我将编码更改为“ISO-8859-1”,我可以使用file_contents = f1.read() 但我会得到完全的垃圾,例如 ïÿéÿðÿéÿòÿèÿñÿèÿíÿèÿ 等等。我有什么遗漏吗?

【问题讨论】:

  • 我希望扩展名为 .dat 的文件更有可能包含某种二进制数据,而不是任何人类可读的数据。这个文件的确切来源是什么?
  • 期望文件内容是什么样的,为什么?特别是,为什么它应该是除了“像ïÿéÿðÿéÿòÿèÿñÿèÿíÿèÿ等完全垃圾”?
  • 该文件几乎可以肯定地连续包含这些整数值的原始二进制表示。在任何文本编码下,这些看起来都没有意义。您链接的网站提到“12 位分辨率”,因此这些值甚至可能是位压缩的(这样文件的某些字节是两个不同样本值的一部分)。
  • 不,如果不知道(或缓慢而痛苦地弄清楚)数据的预期解释方式,您就无法有意义地解释数据。
  • 这些文件似乎是一种名为 WFDB 的格式。一些信息可以在这里找到:physionet.org/physiotools/wag/signal-5.htm。您不能自己对 .dat 文件做任何事情,您必须阅读相应的 .hdr 文件(这是人类可读的文本)以找出二进制数据的确切格式。

标签: python


【解决方案1】:

相关文件未使用 CP1252 编码。它正在使用另一种编码。哪一个你必须自己弄清楚。

如果您使用的是该编辑器,请在 Notepad++ 中打开文件。在右下角它会告诉你当前的文件编码。在顶部菜单中,在“查看”旁边找到“编码”。在“编码”中转到“字符集”并在那里寻找您需要的编码。

【讨论】:

  • 你怎么知道哪种编码是正确的?我从physionet.org/content/ecgiddb/1.0.0 获得数据,据我所知来源是俄语,但这不是一个选择。
  • @corleone_chris 你期待什么?为什么你认为这应该被解释为 text
  • @juanpa.arrivillaga 在我获得数据的网站上,您可以选择在表格中查看数据,它显示为三列;时间 ECG I 和 ECG I 过滤。在两个 ECG 列下,它包含电压电平。
  • @corleone_chris 好的,我不确定这是否能回答我的问题。除非您期望它通过将其作为文本文件打开来创建该可视化?同样,您期望什么文本。数据似乎是原始心电图记录,而不是文本。将其解释为文本将永远是垃圾。
  • @juanpa.arrivillaga 我没想到会有任何特定的文本。我只是希望能够将数据转换为更易于人类阅读的内容
猜你喜欢
  • 2017-09-12
  • 2020-07-05
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2011-01-26
  • 2016-06-26
  • 2019-02-21
相关资源
最近更新 更多