读取大型机EBCDIC文件

0 投票
1 回答
26948 浏览
提问于 2025-04-20 04:33

我有一个用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                           :
 :          :        :      :                                                   :

1 个回答

6

看看这个codecs模块。从标准编码表上看,EBCDIC也被称为cp-500。你可以试试下面这样的代码:

import codecs

with open("EBCDIC.txt", "rb") as ebcdic:
    ascii_txt = codecs.decode(ebcdic.read(), "cp500")
    print(ascii_txt)

正如mpez0在评论中提到的,如果你使用的是Python 3,可以把代码简化成这样:

with open("EBCDIC.txt", "rt", "cp500") as ebcdic:
    print(ebcdic.read())

我手头没有EBCDIC文件,所以没法测试这个,但这应该能帮你入门。

撰写回答