2017-07-30 2 views
0

Je suis en train de trouver la taille totale du fichier d'un serveur ftp avec le script suivant:En utilisant os.walk pour trouver la taille totale du serveur 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) 

Tout fonctionne jusqu'à ce que j'essaie d'utiliser os. Marcher pour trouver la liste des répertoires sur le serveur FTP, utilisez ftp.cwd pour aller dans chaque répertoire et ajouter la taille totale à la variable "taille". Lorsque j'appelle print (size), le résultat est 0, alors qu'il devrait s'agir d'un entier positif. Est-ce qu'il me manque quelque chose avec la combinaison de os.wallk et de ftp.pwd?

+0

Avez-vous besoin d'utiliser ftp.cwd (os.path.join (root, x))? – AK47

+0

Copie possible de [Obtenir la taille du dossier en utilisant FtpLib] (https://stackoverflow.com/questions/22090001/get-folder-size-using-ftplib) –

Répondre

1

Utilisez cette fonction pour récupérer la taille du répertoire à l'aide du client ftp.

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 

Vous pouvez récursive appeler le get_size_of_directory pour chaque répertoire que vous trouverez dans le répertoire Hope this helps !!

+0

Salut Afroze, est-ce que cela fonctionne avec les sous-répertoires de la racine? –

+0

Vous pouvez appeler récursivement le répertoire get_size_of_directory pour chaque répertoire que vous trouvez dans le répertoire. –

+0

J'ai également mis à jour la fonction pour les répertoires. –