Python 使用FtpLib获取文件夹大小

Python 使用FtpLib获取文件夹大小,python,ftp,ftplib,Python,Ftp,Ftplib,我正在使用FtpLib(Python)从ftp服务器下载包含文件的文件夹。但在开始下载之前,我想知道文件夹的大小 我在文档中找到了FTP.size(filename),但这只是针对文件,而不是文件夹。。。我可以循环浏览文件夹中的所有文件,但该文件夹可能包含子文件夹 那么,有人知道如何使用FtpLib获取文件夹的大小吗?经过反复尝试,我找到了解决方案 def get_size(directory): size = 0 for file in FTP.nlst(directory):

我正在使用FtpLib(Python)从ftp服务器下载包含文件的文件夹。但在开始下载之前,我想知道文件夹的大小

我在文档中找到了
FTP.size(filename)
,但这只是针对文件,而不是文件夹。。。我可以循环浏览文件夹中的所有文件,但该文件夹可能包含子文件夹


那么,有人知道如何使用FtpLib获取文件夹的大小吗?

经过反复尝试,我找到了解决方案

def get_size(directory):
    size = 0
    for file in FTP.nlst(directory):
        size += FTP.size(file)
    return size
它基于Alex Thorntons的解决方案,但我记住可能存在子文件夹。 当它是一个文件夹时,
ftp.cwd()

ftp.cwd()
命令抛出错误时,它是一个文件,我们可以得到文件大小。该类型设置为“I”(图像),这将强制采用二进制模式,因为在ASCII模式下不允许使用
ftp.size()
命令

def get_total_size(self, directory):
    size = 0
    for filename in self.ftp.nlst(directory):
        try:
            self.ftp.cwd(filename)
            size += self.get_total_size(filename)
        except:
            self.ftp.voidcmd('TYPE I')
            size += self.ftp.size(filename)
    return size

Frederik Voordeckers的解决方案对我不起作用。当递归调用该方法时,在处理子文件夹结构时,会引发错误
550 directory/../sub_directory:没有这样的文件或目录

我确实修改了他的原始代码,删除了“自我声明”,因为我没有在类中使用该方法。这可能导致了错误。我不知道

以下是我的解决方案:

def get_total_size(ftp_dir):
    size = 0
    parent_dir = ftp.pwd() # get the current directory
    for filename in ftp.nlst(ftp_dir):
        # (don't forget to import os)
        path = os.path.join(parent_dir, filename) # keeps recursively track of the path
        try:
            ftp.cwd(path)
            size += get_total_size(path)
            ftp.cwd(parent_dir)
        except:
            ftp.voidcmd('TYPE I')
            size += ftp.size(path)
    return size

我不知道是否有现成的python库/模块,但ftp的结构不允许这样做。似乎您必须在代码中对文件夹下的文件大小求和,并且必须递归地这样做才能获得文件夹大小。我得到
ftplib.error\u perm:550大小在ASCII模式下是不允许的
为了避免复杂化,我会将您指向@FrederikVoordeckers的解决方案。@FrederikVoordeckers-得到了相同的错误,添加了
ftp.voidcmd('typei')
就在ftp.size(file)之前,它起作用了——但当然只适用于文件,而不是folders@GregZaal:你可能想看看公认的答案;)我认为在这个脚本中,自我是不必要的!