Рекурсивный список каталогов FTP в Python - PullRequest
3 голосов
/ 30 декабря 2011

У меня проблемы с получением списка каталогов на удаленном FTP-сайте. Этот ответ не работает (я не получаю вывод, кажется, что он зависает).

Вот самая простая реализация, о которой я могу подумать - он должен просто распечатать полный путь каждого каталога, в котором он находится.находки:

import ftplib

def ftp_walk(ftp):    
print 'Path:', ftp.pwd()
    dirs = ftp.nlst()
    for item in (path for path in dirs if path not in ('.', '..')):
        try:
            ftp.cwd(item)
            print 'Changed to', ftp.pwd()
            ftp_walk(ftp)
            ftp.cwd('..')
        except Exception, e:
            print item, e

ftp = ftplib.FTP('ftp.site.com')                                        
ftp.login('user', 'pass')
ftp.cwd('1')
ftp_walk(ftp)

Моя структура каталогов:

1/
 1-1/
   1-2/
 1-2/
 1-3/
 1-4

Однако выводит только следующее.Предполагается, что рабочий каталог один раз изменяется на новый подкаталог, но при вызове ftp_walk () с новым cwd он не идет дальше:

> Path: 1/
> Changed to 1-1/

Ответы [ 2 ]

0 голосов
/ 18 февраля 2016

До ftp.login('user', 'pass') и после конструктора необходимо вызвать ftp.connect().

0 голосов
/ 03 января 2012

Ну, я полагаю, что пользователь, в который вы входите, имеет доступ ко всей этой структуре, потому что в противном случае он выдаст ошибку и не выведет этот конкретный каталог.

Если вы получаете исключение, пожалуйста,положи это здесь.Может быть, вам стоит try..finally ваш диск, чтобы он не потерялся.Могу ли я предложить:

    try:
        ftp.cwd(item)
        print 'Changed to', ftp.pwd()
        try:
            ftp_walk(ftp)
        finally:
            ftp.cwd('..')
    except ftplib.error_perm, e:
        print item, e
...