我通过 FTP 从 NAS 检索文件有两种方式:
我有一个 .bat 文件:
a)
ftp -s:C:\TEMP\runTheDownload.txt
(脚本调用txt中的代码)open some.address.eu
username
password
ascii
quote "site SBDataconn=ANOTHER.ADD.RESS.HERE
get 'THE.NAS.LOCATION.OF.THE.FILE' C:\TEMP\output.txt
我有一个带有上述输入的Python代码,其中我使用ftplib和以下代码:
with FTP(ftp_server) as ftp:
ftp.login(ftp_user, ftp_password)
print("Connected to FTP server.")
# 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 服务器很特别。
FTP.retrlines
。