use*_*491 1 python ascii mainframe ebcdic
我有一个EBCDIC编码的大型机文件,我需要将其转换为ASCII格式.我可以使用哪些库/工具来执行此操作.我最熟悉Python.
我收到的文件有一本食谱,可用于解析文件(部分内容如下).
什么类型:'C','P'和'B'是什么意思?我猜C =字符,B =字节,P =打包号码?
1:----------------------------------------------------------------------------------------------------------------------------------:
:LAYOUT NAME: B224E DATE: 02/20/14 PAGE 7 OF 14:
: ------- -------- --- ---:
:COBOL: PAN-NAME: NONE COPYLIB-NAME: RECB224E :
: -------------------- -------------------- :
:BAL : PAN-NAME: NONE COPYLIB-NAME: NONE :
:------------------------------------------------------------------------------:
:TYPE OF RECORD: EXTENDED SORT KEY AREA - SEGMENT "A" (OPTIONAL) :
:------------------------------------------------------------------------------:
:POSITION : LENGTH : TYPE : DESCRIPTION :
:----------:--------:------:---------------------------------------------------:
: : : : :
: : : : :
: : : : :
:001 - 001 : 1 : C : SEGMENT IDENTIFIER - "A" :
: : : : :
:002 - 003 : 2 : P : SEGMENT LENGTH :
: : : : :
:004 - ??? : ??? : C : EXTENDED SORT KEY AREA :
: : : : :
Run Code Online (Sandbox Code Playgroud)
看看codecs模块.从标准编码表中,看起来EBCDIC也被称为cp-500.像下面这样的东西应该工作:
import codecs
with open("EBCDIC.txt", "rb") as ebcdic:
ascii_txt = codecs.decode(ebcdic, "cp500")
print(ascii_txt)
Run Code Online (Sandbox Code Playgroud)
正如mpez0在评论中指出的那样,如果您使用的是Python 3,则可以将代码压缩为:
with open("EBCDIC.txt", "rt", "cp500") as ebcdic:
print(ebcdic.read())
Run Code Online (Sandbox Code Playgroud)
没有EBCDIC文件,我无法测试,但它应该足以让你入门.