无法在 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 字符,哪些字节是二进制数据。对于后者,你还需要更详细地了解这个二进制数据。这个主机文件的提供者应该可以告诉你记录是如何建立的。
我正在尝试使用以下代码读取大型机生成的文件:最终目标是将其加载到数据帧中。
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 字符,哪些字节是二进制数据。对于后者,你还需要更详细地了解这个二进制数据。这个主机文件的提供者应该可以告诉你记录是如何建立的。