python-3.x - 无法在 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')
解决方案
Notepad++ 屏幕截图中显示的数据显示了很多NUL字符,即 x'00' 值。这表明主机文件不仅包含可打印字符,还包含二进制数据。这对于大型机文件是很正常的。
我已将前几个字符转换为 EBCDIC
ÃÒÕ.....€..".ÆÅÙÙÅÙÖ@ÙÁÆÆÁÅÓÓÖ
序列 '.....' 是NULNULNULEOTNUL
,而序列 '..".' 是NULNUL"SI
。
结果是
'CKN' '0000000400800000220F'x 'FERRERO RAFFAELLO'
即三个字符,后跟一个 10 字节的二进制序列,然后是另一个字符串。
我的观点是,您不能简单地将这个文件从 ASCII 转换为 EBCDIC。您需要了解哪些字节是 EDCDIC 字符,哪些字节是二进制数据。对于后者,您还需要更详细地了解此二进制数据。该大型机文件的提供者应该能够告诉您记录是如何构建的。
推荐阅读
- python - 在全息视图中访问散景(图)参数
- c++ - 从源代码构建时,boost iostreams 中的编译错误
- linux - 使用 airmon-ng 收听特定频道
- android - cursor.moveToNext() 抛出 CursorWindowAllocationException
- reactjs - React.useState 不会从 props 重新加载状态
- docker - 如何从私有存储库重新启动 Cloud Foundry Docker 应用程序?
- wpf - 使用 mage.exe 自动执行扩展验证 (EV) 代码签名
- jquery - MCE5-如何在 Tiny mce-5 中将任何图像作为自定义按钮图标?
- kubernetes - Kubernetes 本地存储类 (kubernetes.io/no-provisioner) 保留策略卷
- php - 数据表中的无效 JSON 响应