无法在 Python 中读取大型机生成的文件

Unable to read a mainframe generated file in Python

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

import codecs

with open(r'C:\Users3622\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')

我也在尝试添加对输入文件在记事本++中的外观的一瞥。

您必须将文件内容传递给 codecs.decode 而不是“文件对象”。

试试这个:ascii_txt = codecs.decode(ebcdic.read(), "cp500")

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

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

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

序列“.....”是NULNULNULEOTNUL,序列“..”。是 NULNUL"SI.

结果是

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

也就是三个字符,后面是一个10字节的二进制序列,后面是另一个字符串。

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