处理 FTP 下载的响应

问题描述 投票:0回答:1

我通过 FTP 从 NAS 检索文件有两种方式:

  1. 有一个 .bat 文件,其中我有: a)

    ftp -s:C:\TEMP\runTheDownload.txt
    (脚本调用txt中的代码) b) .txt 包含以下内容:

    打开 some.address.eu

    用户名

    密码

    ascii

    引用“站点 SBDataconn=ANOTHER.ADD.RESS.HERE

    获取'THE.NAS.LOCATION.OF.THE.FILE'C:\TEMP\output.txt

  2. 我有一个带有上述输入的Python代码,其中我使用ftplib和以下代码: 将 FTP(ftp_server) 作为 ftp: ftp.登录(ftp_用户,ftp_密码) print("已连接到 FTP 服务器。")

         # Set transfer mode to ASCII
         ftp.sendcmd("TYPE A")
         # print("Switched to ASCII mode.")
    
         # Execute the custom FTP command (quote)
         ftp.sendcmd('SITE SBDataconn=ANOTHER.ADD.RESS.HERE')
         print("Custom SITE command executed.")
    
         # Download the file
         with open(local_file, 'wb') as file_obj:
             # Write info to buffer
             ftp.retrbinary(
                 f"RETR {remote_file}", file_obj.write)
    

当我从第一种方法查看output.txt时,它给了我完美的数据,如“001”,“abc”,“2013230”......,但是Python输出给了我编码的返回,如:

\x7f\xf0\xf0\xf1\x7fk\x7f\xf0\xf0\xf0\xf0\xf1\xf0\xf2\xf4\xf9\x7fk\x7f\xf0\xf0\xf0\ xf0\xf0\xf0\xf0\xf0\xf0\x7fk\x7fN\xf0\x7fk\x7f\xf0\xf4\x7fk\x7f\xf0\xf0\x7fk\x7f@@@@ @@@@@@\x7fk\x7f\xd6\xd7\xc3\xe4\xe2\xc5\xd9@\x7fk\x7f\x81\xa4\xa3\x96\x94\x81\xa3\x8 9\xa2\x83\x88\x85@\xc5\x89\x95\xa2\xa3\xa4\x86\xa4\x95\x87@`@\xf1K\xf7K\xf2@@@@@@@@@

我想知道我的 Python 代码中缺少什么来很好地转换它,就像使用 .bat 文件一样。

我尝试用不同的方式解码它,但它从来没有给我返回任何看起来远程像正确结果的东西。我得到的最好的东西是“ISO-8859-1”解码,它导致 \x7fððñ\x7fk\x7fðððñðòù\x7fk\x7fðððððððð...

我很感激任何有关 .bat 文件工作方式不同或如何在 Python 中正确解码的建议。

非常感谢!

python batch-file ftp
1个回答
0
投票

使用

ftp
您正在使用文本/ascii 模式:

ascii

当使用 ftplib 时,您使用的是二进制模式:

ftp.retrbinary(...)

对于大多数 FTP 服务器,区别仅在于 EOL 转换。但显然你的 FTP 服务器很特别。

要在 ftplib 中使用文本/ascii 模式,请使用

FTP.retrlines

© www.soinside.com 2019 - 2024. All rights reserved.