Python ftplib在下载之前无法获取文件大小?

时间:2010-07-12 20:17:17

标签: python ftplib

我正在使用ftplib来传输文件。一切都很好。现在我在下载之前尝试获取目标文件的大小。

  1. 首先,我尝试使用ftp.size(filename)获取大小。服务器抱怨我不能在ascii模式下这样做。

  2. 然后我尝试使用ftp.sendcmd(“binary”)和ftp.sendcmd(“bin”)设置二进制模式。在这两种情况下,服务器都抱怨“500二进制不理解”

  3. 在此实例中,ftplib可以在下载之前获取文件的大小吗?我不控制FTP服务器,也无法改变它的行为方式。

    由于

3 个答案:

答案 0 :(得分:22)

回复非常晚,但这是正确答案。这适用于ProFTPD。

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file

答案 1 :(得分:5)

Ftplib可以在下载之前获取文件的大小。正如文档所说:

  

FTP.size(文件名)   请求大小   服务器上名为filename的文件。   成功时,文件的大小是   以整数形式返回,否则为None   退回。 请注意SIZE   命令不是标准化的,但是   许多常见的服务器都支持   实现

显然您的服务器不支持此功能。

答案 2 :(得分:0)

“服务器抱怨我不能在ascii模式下这样做。” - 尝试显示您使用的确切代码以及服务器响应的确切文本。使用复制/粘贴,不要从内存中输入。

您是否可以访问命令行FTP客户端?如果没有,请一个。用它来试验服务器可以做什么。像REMOTEHELP这样的客户端命令是你的朋友。例如:

ftp> remotehelp size
214 Syntax: SIZE <sp> pathname

这表示我连接的服务器将支持SIZE命令。