Форум сайта python.su
0
Добрый вечер.
Подскажите пожалуйста, как загрузить на FTP-сервер при помощи ftplib папку с файлами?
С загрузкой отдельных файлов трудностей нет.
Но как записать на ftp папку с вложенными подпапками? (проблема с подпапками, если делать циклом)
Если будет пример кода, буду очень благодарен.
Я с питоном мало знаком.
from ftplib import * import os def sendfolder(folder): print os.getcwd() filelist = os.listdir(folder) print os.listdir(folder) for filename in filelist: if os.path.isdir(filename): ftp.mkd(filename) ftp.cwd(filename) os.chdir(folder + "\\" + filename) sendfolder(folder + "\\" + filename) elif os.path.isfile(filename): file = open(filename,'r') ftp.storbinary('STOR ' + filename, file) file.close() print "Uploaded " + filename else: os.chdir("..") ftp.cwd("..") #queryes ip = raw_input("Please enter IP: ") #FTP sending print "Connecting to FTP-server..." ftp = FTP(ip) ftp.login("admin","admin") print ftp.getwelcome() print ftp.pwd() print ftp.dir() dir = os.getcwd() sendfolder(dir) ftp.quit() ftp.close()
Офлайн
221
Подобная задача типична, и обычно решается применением рекурсии
Офлайн
0
Вы не могли бы показать как именно? Я просто с питоном связался разово. Что смог за пару дней изучить, написал.
Офлайн
0
from ftplib import * import os import time def sendfolder(folder): listforsend = [] for file in os.listdir(folder): path = os.path.join(folder, file) if not os.path.isdir(path): sendfile = open(path,'r') ftp.storbinary('STOR ' + file, sendfile) sendfile.close() time.sleep(0.1) print "Uploaded " + file else: print "Directory finded " + path ftp.mkd(file) ftp.cwd(file) sendfolder(path) ftp = FTP('localhost') ftp.login('anonymous','aa@') ftp.cwd('ftp') ftp.dir() directory = os.getcwd() sendfolder(directory) ftp.quit() ftp.close()
Офлайн
221
Вообще то это и есть рекурсия - вызов в функции самой себя. :) Для первого раза у вас оч. хорошо получилось.
Офлайн
0
JOHN_16
Вообще то это и есть рекурсия - вызов в функции самой себя.Для первого раза у вас оч. хорошо получилось.
Офлайн
857
sdaert14Сначала сделай на локальном диске копирование дерева, а когда будет готово, подменишь место назначения и команды по созданию директорий и файлов на сетевые.
Никак не пойму, что я делаю не так.
Офлайн
0
Добавь строки, при выходе из цикла:
ftp.cwd('..') os.chdir('..')
def upload_dir_recursion(ftp, sended_dir_path): os.chdir(sended_dir_path) for file_name in os.listdir(sended_dir_path): file_path_name = os.path.join(sended_dir_path, file_name) if os.path.isfile(file_path_name): file = open(file_path_name, 'rb') ftp.storbinary('STOR {}'.format(file_name), file) file.close() print "Uploaded: " + file_path_name elif os.path.isdir(file_path_name): print "Directory finded: " + file_path_name ftp.mkd(file_name) ftp.cwd(file_name) upload_dir_recursion(ftp, file_path_name) ftp.cwd('..') os.chdir('..')
Отредактировано MasterElp (Авг. 2, 2019 09:40:06)
Офлайн