Python ftplib使用问题:子目录文件下载与Zip文件解码错误
Python FTP下载问题解决方案
问题1:下载FTP子目录中的文件
有两种简单的实现方式:
方法1:先切换到目标子目录
使用ftp_server.cwd()方法切换到目标子目录,再执行下载操作:
import ftplib HOSTNAME = "xxx" USERNAME = "xxx" PASSWORD = "xxx" ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_server.encoding = "utf-8" # 切换到指定子目录,示例路径为"docs/subfolder" ftp_server.cwd("docs/subfolder") filename = "gfg.txt" with open(filename, "wb") as file: ftp_server.retrbinary(f"RETR {filename}", file.write) ftp_server.dir() ftp_server.quit()
方法2:直接指定文件完整路径
无需切换目录,直接在RETR命令中传入文件的完整路径:
import ftplib HOSTNAME = "xxx" USERNAME = "xxx" PASSWORD = "xxx" ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_server.encoding = "utf-8" # 直接指定子目录下的文件完整路径 file_path = "docs/subfolder/gfg.txt" # 提取文件名用于本地保存 filename = file_path.split("/")[-1] with open(filename, "wb") as file: ftp_server.retrbinary(f"RETR {file_path}", file.write) ftp_server.dir() ftp_server.quit()
问题2:下载Zip文件时出现UnicodeDecodeError
错误根源是你用**文本模式("r")**尝试读取二进制格式的Zip文件。Zip属于二进制文件,不能用文本编码解析。
修改方案(去掉无效的文本读取逻辑)
import ftplib HOSTNAME = "xxx" USERNAME = "xxx" PASSWORD = "xxx" ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_server.encoding = "utf-8" filename = "archive.zip" with open(filename, "wb") as file: ftp_server.retrbinary(f"RETR {filename}", file.write) ftp_server.dir() ftp_server.quit()
如果需要解压Zip文件的示例
import ftplib import zipfile HOSTNAME = "xxx" USERNAME = "xxx" PASSWORD = "xxx" ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_server.encoding = "utf-8" filename = "archive.zip" with open(filename, "wb") as file: ftp_server.retrbinary(f"RETR {filename}", file.write) # 解压到指定目录 with zipfile.ZipFile(filename, 'r') as zip_ref: zip_ref.extractall("extracted_files") ftp_server.dir() ftp_server.quit()
内容的提问来源于stack exchange,提问作者alex1290
相关产品推荐
相关产品推荐

