Python — загрузите все папки, подпапки и файлы с помощью модуля Python ftplib

Я работал весь день, пытаясь понять, как использовать модуль python ftplib для загрузки папок, подпапок и файлов с ftp-сервера, но я мог придумать только это.

from ftplib import FTP
import sys, ftplib

sys.tracebacklimit = 0 # Does not display traceback errors
sys.stderr = "/dev/null" # Does not display Attribute errors

Host = "ftp.debian.org"
Port = 21
Username = ""
Password = ""

def MainClass():
    global ftp
    global con
    Host
    Port
    ftp = FTP()
    con = ftp.connect(Host, Port) # Connects to the host with the specified port

def grabfile():
    source = "/debian/"
    filename = "README.html"
    ftp.cwd(source)
    localfile = open(filename, 'wb')
    ftp.retrbinary('RETR ' + filename, localfile.write)
    ftp.quit()
    localfile.close()

try:
    MainClass()
except Exception:
    print "Not Connected"
    print "Check the address", Host + ":" + str(Port)
else:
    print "Connected"

if ftplib.error_perm and not Username == "" and Password == "":
    print "Please check your credentials\n", Username, "\n", Password

credentials = ftp.login(Username, Password)
grabfile()

Этот скрипт python загрузит файл README.html с ftp.debian.org, но я хотел бы иметь возможность загружать целые папки с файлами и подпапками в них, и я не могу понять это. Я искал разные сценарии Python, используя этот модуль, но не могу найти ни одного, который делает то, что я хочу.

Любые предложения или помощь будут очень признательны.

Примечание. Я по-прежнему хотел бы использовать Python для этой работы, но это может быть другой модуль, такой как ftputil или любой другой.

Заранее спасибо, Алекс


person Alex Lowe    schedule 10.10.2015    source источник


Ответы (1)


Короткое решение: вы могли бы просто запустить: "wget ​​-r ftp://username:password @ftp.debian.org/debian/*", чтобы получить все файлы в каталоге debian. Затем вы можете обрабатывать файлы в python.

Длинное решение: вы можете просмотреть каждый список каталогов, используя ftplib, получить список каталогов, разобрать его, а затем получить каждый файл и рекурсивно перейти в каталоги. Если вы выполните поиск в Интернете, вы найдете предыдущие сообщения в stackoverlow, которые решают эту проблему. проблема

person borisp    schedule 10.10.2015
comment
Это так забавно, что вы подняли этот пост, потому что это код, который не имел для меня смысла. - person Alex Lowe; 10.10.2015
comment
не могли бы вы объяснить, что делает эта строка кода в этом посте?os.mkdir(destination[0:len(destination)-1]+path) - person Alex Lowe; 10.10.2015
comment
path - путь к новой копируемой директории с сервера. directory - каталог назначения, в который будут скопированы файлы. Таким образом, эта строка создает каталог, в который будут скопированы файлы из path. - person borisp; 10.10.2015
comment
Спасибо за ответ. - person Alex Lowe; 10.10.2015