【问题标题】:How to read VSAM file in Python3如何在 Python3 中读取 VSAM 文件
【发布时间】:2019-02-28 04:48:22
【问题描述】:

我在 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"

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

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

【问题讨论】:

  • 这是大型机 VSAM 文件 ???;是 Cobol Copybook 吗???
  • 如果来自大型机,最好将 VSAM 文件复制到大型机上的文本文件(或至少是 VB 文件)并传输此新文件
  • @BruceMartin 这是大型机 VSAM 文件。我无法保存和阅读它,因为我想阅读很多这样的文件,而且这些文件每天都在更新。如果我通过保存来使用它,我将很难获得最新数据。请提出建议。

标签: python-3.x mainframe copybook vsam


【解决方案1】:

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 文件的副本和随后的 cmets 似乎表明您希望访问 z/OS 上的“许多此类文件”。

通常情况下,非大型机开发人员必须访问现有大型机系统中包含的部分或全部数据,因此您必须讨论您和他们的需求,以提出双方都同意的解决方案。我试图概述this answerthis answerthis answerthis question 中的一些问题,其中提到了 Calcite(我没有经验)和 z/OS 的 NFS 服务器功能(其中我也没有经验)。很多功能,很多选项,我将在这里重申不止一个链接答案:

请理解...之间存在很大差异

  • 技术上可行的方法
  • 你的商店允许什么
  • 根据您的要求,什么可能提供强大且可维护的解决方案

这是三个非常不同的东西。我们中的一些人有生命 让我们不愿回答有关问题的经历 在没有提及允许的内容的情况下,什么是技术上可能的 您的商店或实际的业务需求是什么 解决了。​​

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

【讨论】:

  • 感谢您提供此信息。我是大型机开发人员,我可以理解您关于访问已在 CICS 区域中打开的 VSAM 文件的观点。实际上,我正在研究 Microfocus COBOL,操作系统是 Sun Solaris。我要阅读的文件不是产品文件,所以对我来说不会有问题。由于我不在 Z/OS 上,有什么方法可以访问这些文件
  • @Nilesh 很抱歉,我没有使用 Micro Focus 生态系统的经验。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多