首页 > 解决方案 > 无法在 Python 中读取大型机生成的文件

问题描述

我正在尝试使用以下代码读取大型机生成的文件:最终目标是将其加载到数据框中。

import codecs

with open(r'C:\Users\743622\Downloads\UC005\USA.CKN.D050920', "rb") as ebcdic:
    ascii_txt = codecs.decode(ebcdic, "cp500")
    print(ascii_txt)

这样做时出现以下错误:

----> 5     ascii_txt = codecs.decode(ebcdic, "cp500")
      6     print(ascii_txt)
      7 

TypeError: decoding with 'cp500' codec failed (TypeError: a bytes-like object is required, not '_io.BufferedReader')

我还试图添加对记事本++中输入文件的外观的一瞥。记事本++中的数据快照

标签: python-3.xpandasebcdic

解决方案


Notepad++ 屏幕截图中显示的数据显示了很多NUL字符,即 x'00' 值。这表明主机文件不仅包含可打印字符,还包含二进制数据。这对于大型机文件是很正常的。

我已将前几个字符转换为 EBCDIC

ÃÒÕ.....€..".ÆÅÙÙÅÙÖ@ÙÁÆÆÁÅÓÓÖ

序列 '.....' 是NULNULNULEOTNUL,而序列 '..".' 是NULNUL"SI

结果是

'CKN' '0000000400800000220F'x 'FERRERO RAFFAELLO'

即三个字符,后跟一个 10 字节的二进制序列,然后是另一个字符串。

我的观点是,您不能简单地将这个文件从 ASCII 转换为 EBCDIC。您需要了解哪些字节是 EDCDIC 字符,哪些字节是二进制数据。对于后者,您还需要更详细地了解此二进制数据。该大型机文件的提供者应该能够告诉您记录是如何构建的。


推荐阅读