使用os.walk查找FTP服务器的总大小

时间:2017-07-30 16:26:36

标签: python ftp python-os

我试图使用以下脚本找到ftp服务器的总文件大小:

import os
import ftplib
from os.path import join, getsize

serveradd = ("an.ftpserver.co.uk")          # Define the ftp server

print("Logging in to "+serveradd+"\n")

top = os.getcwd()                                       # Define the current directory

filelist = []

for (root, dirs, files) in os.walk(top):   # Get list of files in current directory
    filelist.extend(files)
    break

dirname = os.path.relpath(".","..")                     # Get the current directory name

ftp = ftplib.FTP(serveradd)

try:                                                    # Log in to FTP server
    ftp.login("username", "password")
except:
    "Failed to log in..."

ftp.cwd('data/TVT/')                                    # CD into the TVT folder

print("Contents of "+serveradd+"/"+ftp.pwd()+":")

ftp.retrlines("LIST")                                   # List directories on FTP server

print("\n")

print(ftp.pwd())

print(serveradd+ftp.pwd())

size = 0

for (root, dirs, files) in os.walk(ftp.pwd()):
    for x in dirs:
        try:
            ftp.cwd(x)
            size += ftp.size(".")
            ftp.cwd("..")
        except ftplib.error_perm:
            pass
print(size)

一切正常,直到我尝试使用os.walk查找FTP服务器上的目录列表,使用ftp.cwd进入每个目录并将总大小添加到变量“size”。

当我调用print(size)时,结果为0,它应该是一个正整数。

我是否遗漏了os.wallk和ftp.pwd的组合?

1 个答案:

答案 0 :(得分:0)

使用此功能可以使用ftp client获取目录大小。

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

您可以递归调用在目录中找到的每个目录的get_size_of_directory 希望这会有所帮助!!