读取大型机EBCDIC文件

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)

Mat*_*DMo 5

看看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文件,我无法测试,但它应该足以让你入门.

  • 使用Python3,可以执行open(“EBCDIC.txt”,“rt”,encoding =“cp500”)。此外,文档中的“cp500”中没有破折号或下划线。 (2认同)