我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?

Posted

技术标签:

【中文标题】我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?【英文标题】:We have many mainframe files which are in EBCDIC format, is there a way in Python to parse or convert the mainframe file into csv file or text file? 【发布时间】:2019-06-12 18:44:03 【问题描述】:

我需要从大型机文件中读取记录并对记录值应用一些过滤器。 所以我正在寻找将大型机文件转换为 csv 或文本或 Excel 工作簿的解决方案,以便我可以轻松地对文件执行操作。

我还需要验证记录数。

【问题讨论】:

this answer 的副本? @PeterT 它不是文本文件,我们如何读取不是 . txt 文件? 这取决于内容:可以是任何内容。可能是 SAS 文件,也可能是其他文件,我们无法为您猜测。最好的,通常也是唯一的方法,是用创建它们的原始软件打开文件,然后导出到更“便携”的文件中。 "它不是文本文件" - EBCDIC 不只是文本数据的表示吗? en.wikipedia.org/wiki/EBCDIC 这种事情经常出现。 Here 是您可能需要考虑的一些事项。 【参考方案1】:

谁说过 EBCDIC? OP没有。

如果它所有文本,那么使用 EBCDIC 到 ASCII 转换的 FTP'ing 是可行的,包括在 Python 中。

如果不是,那么:

需要在 z/OS 上进行提取和转换为 CSV。也许使用 COBOL 程序。然后 CSV 可以通过 FTP 下载

数据必须经过 FTP 处理 BINARY,然后对其进行解析和翻译。

但是,通常情况下,我们需要更多信息。

【讨论】:

“谁说过 EBCDIC?OP 没有。” - 除了标题.... 对。但是所有EBCDIC?还是里面有一些二进制文件?【参考方案2】:

我最近正在处理硬拷贝日志,想打破记录。我使用 python 来执行此操作,因为该记录实际上是一个固定位置记录,在记录的固定位置具有不同的数据项。在我的例子中,整个记录都是文本,但人们可以轻松地应用这种技术将各种列转换为适当的类型。

这是一个示例记录。我添加了几行代码来帮助可视化代码中用于访问数据的数据偏移:

          1         2         3         4         5         6         7         8         9
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
N 4000000 PROD     19114 06:27:04.07 JOB02679 00000090  $HASP373 PWUB02#C STARTED - INIT 17

注意各个项目的固定列位置以及它们是如何按位置引用的。使用这种技术,您可以处理文件并创建一个 CSV,其中包含您想要在 Excel 中处理的输出。

就我而言,我使用的是 Python 3。

def processBaseMessage(self, message):    
        self.command  = message[1]
        self.routing  = list(message[2:9])
        self.routingCodes = []                       # These are routing codes extracted from the system log.
        self.sysname  = message[10:18]
        self.date     = message[19:24]
        self.time     = message[25:36]
        self.ident    = message[37:45]
        self.msgflags = message[46:54]
        self.msg      = [ message[56:] ]

然后,您可以将其格式化为您需要进一步处理的表格。还有其他处理大型机数据的方法,但根据问题,这种方法应该适合您的需求,但有很多变体。

【讨论】:

以上是关于我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

将EBCDIC转换后的文件和pdf文件合并为一个文件并推送到大型机

EBCDIC 到 ASCII 无法正常工作

iconv 将 Mainframe EBCDIC 文件转换为 Unix 可读格式将数据写入一行

如何在 Java 字符串中存储 EBCDIC (IBM-1047) 编码文本而不损坏它?

大型机迁移到 USS/Github

在python中将ebcdic解码为ascii /可读文本