首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FtpLib获取文件夹大小

问使用FtpLib获取文件夹大小
EN

Stack Overflow用户
提问于 2014-02-28 08:34:48
回答 3查看 5.6K关注 0票数 3

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-28 11:25:14

经过一些试验和错误,我找到了解决办法。

这是基于Alex解决方案,但我要记住,可能有子文件夹。当它是一个文件夹时,ftp.cwd()命令成功,函数被递归地调用。

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

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2014-02-28 09:24:47

代码语言:javascript
复制
def get_size(directory):
    size = 0
    for file in FTP.nlst(directory):
        size += FTP.size(file)
    return size
票数 2
EN

Stack Overflow用户

发布于 2016-07-23 11:06:51

弗雷德里克·沃迪克斯的解决方案对我没用。当方法被递归调用时,当处理子文件夹的结构时,它会引发错误550 directory/.../sub_directory: No such file or directory。

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

这是我的解决方案:

代码语言:javascript
复制
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

对每个人来说都是一种魅力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22090001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档