【问题标题】:Download through FTP from Mainframe从大型机通过 FTP 下载
【发布时间】:2013-05-20 12:48:15
【问题描述】:

我正在尝试使用 ftplib 从大型机解析/下载一些文件,但经过几次尝试后仍不成功。

我的代码到现在是:

import ftplib
ftp = ftplib.FTP('host','username','password')
ftp.retrlines("File To be Downloaded")

这很好,我可以看到所需的文件。

但是,当我使用以下代码时。

ftp.retrbinary("RETR 'File_Name'",open('ww.txt','wb').write)

它失败并出现以下错误。

error_reply: 200 Representation type is Image

根据Dag的回复,我尝试了以下代码通过“retrlines”下载文件。

ftp.retrlines("RETR 'File_Name'",open('ww.txt','wb').write)

但它给了我以下错误。

error_reply: 200 表示类型为 Ascii NonPrint

【问题讨论】:

    标签: python ftp mainframe


    【解决方案1】:

    预期的结果是什么? Retrlines 将文件作为文本读取,这对于文本文件是正确的。 Retrbinary 将文件检索为二进制文件。如果您使用 EBCDIC 而不是 ASCII 来定位大型机,这是一个坏主意,并且可能是您得到此结果代码的原因(根据 FTP 规范,这不是错误)。

    【讨论】:

    • 嗨,Dag,是的,文件格式是 EBCDIC 而不是 ASCII。所需的 fromat 是 CSV 或 EXCEL。解析时是否需要使用编码。写作时不知道如何执行。
    • CSV 文件应以文本形式检索(使用 retrlines),Excel (xls) 以二进制形式检索,Excel (xlsx) 以文本形式检索。当使用 retrlines 的第一个示例有效时,为什么在第二个示例中尝试将文件下载为二进制文件?
    • 谢谢达格。试过了,我使用的代码是 "ftp.retrlines("RETR File_Name",open('ww.txt','wb').write)" 但它给了我以下错误。 "error_reply: 200 表示类型是 Ascii NonPrint"
    • 这可能是 ftplib 中的错误。您可以在 ftplib(set_debuglevel 1 或 2)中启用调试并将输出附加到您的问题吗?请记住在发布之前从日志中删除所有登录详细信息。
    • 谢谢达格。有什么东西在这里奏效了。我假设我给出的输出文件的名称拼写错误。再次感谢。
    【解决方案2】:

    尝试在 Python 脚本中明确设置“TYPE”:

    http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.halu001%2Ftype.htm

    我猜除非您指定类型,否则默认值可能是“ASCII”。大多数二进制 FTP 传输的流行最爱是“BINARY”。我不确定什么最适合您的系统:也许是“IMAGE”?

    另外:查看此链接:Downloading text files with Python and ftplib.FTP from z/os

    【讨论】:

    • 嗨,Paul,不知道如何设置 TYPE 或 CODECS。能否请您介绍一下文学作品。
    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2012-08-18
    • 2020-05-25
    相关资源
    最近更新 更多