【问题标题】:Using Mainframe Datasets in Python 3.6 within Anaconda Spyder在 Anaconda Spyder 中使用 Python 3.6 中的大型机数据集
【发布时间】:2019-05-15 10:27:49
【问题描述】:

我正在尝试在 Python3.6 中读取和写入大型机数据集数据。我正在使用 Anaconda 的 Spyder(版本 3.2.4)。我正在使用 Zosftplib 来导入大型机功能。下面是代码sn-p: 导入 zosftplib myzftp = zosftplib.Zftp("ip address-mainframe","username","password") mf_file = open("大型机 ps 文件名", 'r+') ffa = mf_file.read(16); print ("读取记录为:", ffa) mf_file.close()

大型机 PS 文件名包含 1 条记录,数据为 0010021023457893。但我得到的输出是 Spyder 内核中的空格。我也尝试使用 ftplib,但它也没有在那里工作。我相信需要转换,因为它不是我正在阅读的文本文件。有没有人对此有任何建议。请回复。谢谢

通过 FTPLIB 和 Zosftplib 导入

import zosftplib
Myzftp = zosftplib.Zftp("ip address-mainframe","username","password")
mf_file = open("mainframe ps file-name", 'r+')
ffa = mf_file.read(16);
print ("Read record is :", ffa)
mf_file.close()

文件读取和打印后的预期结果应该是 0010021023457893。

【问题讨论】:

  • 大型机 FTP 可能很棘手,因为有两种不同的文件系统,传统的大型机数据集和 UNIX 分层文件系统。我不是 Python 人,但可能是您尝试访问的文件类型不适合您开始的位置。您可以使用“cd”命令在它们之间进行更改。 cd '' 带您退出 UNIX 模式并进入 MVS 模式。 cd /u/myUser 例如带您进入 UNIX 模式。如果您使用命令行连接到大型机,您从哪里开始?
  • 不是针对您的问题,但this 可能有用。更具体到您的问题 - 大型机日志中是否报告了错误?可能是访问错误?
  • 您是否尝试访问 MVS 文件(您提到 PS 文件,我认为它意味着物理顺序,因此是 MVS 文件对象)。

标签: python-3.6 mainframe


【解决方案1】:

zosftplib 包将为您提供对 z/OS 上数据集的 ftp 访问,这意味着您可以下载它,但您必须在本地打开它。此外,您需要了解本地机器和 z/OS 环境之间的编码差异,因此您应该指定 sbdataconn() 参数来提供代码页转换。我可以用这样的代码做你想做的事:

import zosftplib

Myzftp = zosftplib.Zftp('mainframe_ip', 
                        'mainframe_userid', 
                        'mainframe_password',
                        timeout=500.0, 
                        sbdataconn='(ibm-1147,iso8859-1)')
Myzftp.download_text('mainframe_dataset_name', '/tmp/local_filename.txt')

mf_file = open('/tmp/local_filename.txt', 'r+')
ffa = mf_file.read(16);
print ("Read record is :", ffa)
mf_file.close()

【讨论】:

  • 抱歉回复晚了。上面建议的代码对我有用。谢谢!
  • @Mohit 很高兴听到您解决了问题!你能把答案标记为正确吗?这将帮助遇到相同问题的其他人找到此答案。谢谢?
猜你喜欢
  • 2017-08-18
  • 2019-01-18
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多