我通过 FTP 从 NAS 检索文件有两种方式:
有一个 .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
我有一个带有上述输入的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 中正确解码的建议。
非常感谢!
使用
ftp
您正在使用文本/ascii 模式:
ascii
当使用 ftplib 时,您使用的是二进制模式:
ftp.retrbinary(...)
对于大多数 FTP 服务器,区别仅在于 EOL 转换。但显然你的 FTP 服务器很特别。
要在 ftplib 中使用文本/ascii 模式,请使用
FTP.retrlines
。