如何在Python3中读取VSAM文件

时间:2019-02-28 04:48:22

标签: python-3.x mainframe copybook vsam

我在unix系统中有VSAM文件。我想使用python中该文件的布局读取文件。在.idx和.dta中,我将.dta复制到本地计算机上,并尝试使用以下代码进行读取,

infile = open("myfile.dta","r",encoding="ansi")
for line in infile:
    print(line)

没有编码参数,则显示错误。

"UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 1572"

因此,为解决该错误,我在记事本++中打开了文件并检查了编码。现在,我可以读取文件并显示数据了(仍然可以看到一些特殊字符)。

现在主要的问题是如何按照提供的布局逐记录读取此文件记录。

2 个答案:

答案 0 :(得分:2)

There are ports of Python 3 and Python 2 to z/OS。看来Python 3端口当前不支持访问“本机”或“经典” z / OS文件-驻留在z / Unix文件系统中。

VSAM不是一个小话题。如果您对历史和基础技术感兴趣,请随时在您喜欢的搜索引擎中搜索“什么是VSAM”。 TLDR是VSAM文件类似于ISAM,因为它们允许在给定键的情况下读取特定记录。 VSAM当然还有其他功能,但很明显,不是 ISAM,这只是一个比喻。

根据相关文件的使用方式,您可能会遇到一些访问阻力。如果生产CICS区域正在使用这些VSAM文件,则大量使用代码可能会引起争用,从而导致性能下降。

要考虑的事情:您实际上是在向运行中的生产系统添加新需求,这样做需要进行分析,以确定满足您的需求的最佳机制,而又不会对该现有系统造成负面影响。该机制将考虑现有的车间标准,安全性,性能,员工时间等。也许已经进行了分析(我不知道是否有分析),但是您的问题表明您的工作站上只有一个VSAM文件的副本。并且随后的注释似乎表明您希望访问z / OS上的“许多此类文件”。

通常,当非大型机开发人员必须访问现有大型机系统中包含的部分或全部数据时,您必须讨论您的要求及其要求,以提出一个相互同意的解决方案。我试图概述this answerthis answerthis answerthis question中的一些问题,这些问题都引用了方解石(我没有经验)和NFS服务器z / OS的功能(我也没有经验)。功能强大,选项众多,在这里我将重申多个链接答案中的一些内容:

  

请理解...之间有很大的区别

     
      
  • 技术上可行的可能性
  •   
  • 商店允许的物品
  •   
  • 根据您的要求,有什么可能提供健壮且可维护的解决方案
  •   
     

这是三件事。我们有些人有生命   使我们对回答有关以下问题的态度保持沉默的经历   从技术上讲,没有提及允许的内容   您的商店或实际的业务需求是什么   解决。

     

大型机已经存在了半个多世纪,许多商店   有技术问题的标准解决方案。有时解决方案   是“不要那样做,这就是我们我们所要做的。”反对   技术人员的建议或车间标准,   是职业限制。

答案 1 :(得分:1)

您将无法使用Python读取VSAM文件。也许如果您调用C API库,那是值得怀疑的。您可以使用Java JZOS api并进入MVS方面。大多数z / OS系统都安装了Java。如果您没有安装Java,请学习一些COBOL。