2014-01-14 5 views
-1

Я пытаюсь перечислить папок в ftp directory, так что выход заключается в следующем:Как перечислить все папки в каталоге ftp?

[32114, 32115, 32116, ..., 42123] 

Следующий скрипт обращается к сайту FTP. Как я могу получить доступ к папкам в каталоге ftp, используя прикрепленный скрипт в качестве запуска?

import arcpy, ftplib, os, socket 

HOST = 'atlas.ca.gov' 
DIRN = '/pub/naip/2012/doqqs_combined_color-nir/' 
workspace = 'F:/download/location' 

# Get current working directory 
print 'The current working directory is %s' % os.getcwd() 

# Change the current working directory to a download folder 
os.chdir(workspace) 
print 'The workspace has been changed to %s' % workspace 

try: 
    f = ftplib.FTP(HOST) 
except (socket.error, socket.gaierror), e: 
    print 'ERROR: cannot reach "%s"' % HOST 
print '*** Connected to host "%s"' % HOST 

try:  
    f.login() 
except ftplib.error_perm: 
    print 'Error: cannot login anonymously' 
    f.quit() 
print '*** Logged in as "anonymous"' 

try: 
    f.cwd(DIRN) 
except ftplib.error_perm: 
    print 'ERROR: cannot CD to "%s"' % DIRN 
    f.quit() 
print '*** Changed to "%s" folder' % DIRN 

ответ

1

Если вы посмотрите на ftplib документы, есть два очевидных функций для этого: nlst и dir.

Любой из них предоставит вам список все членов в каталоге, в том числе в подкаталогах.

С nlst у вас нет информации кроме имени. Но если вы планировали chdir или иным образом использовали каждый из них, это нормально; вы получите исключения для тех, которые оказались обычным файлом и могут просто пропустить их.

С dir вы получаете полный список каталогов в форме, удобной для чтения. Который вам нужно будет захватить (передав функцию), а затем проанализируйте вручную, что намного менее забавно, но единственный способ заранее узнать, какие элементы являются файлами и какие каталоги.

1

Если сервер является машиной окна, выход ftp.dir() будет выглядеть 01-14-14 04:21PM <DIR> Output

Если сервер имеет * NIX разнообразия в выходе будет выглядеть drwx------ 3 user group 512 Apr 22 2005 Mail

Если вы хотите проверить если элемент является каталогом, используйте регулярное выражение для каждой строки. FTP-сервер Windows будет содержать <DIR>, если элемент является каталогом, а серверы * nix ftp начинаются с d.

Вам нужна помощь с регулярными выражениями Python?

0

Опираясь на ответ по abarnert, следующий производит список:

from ftplib import FTP 
ftp = FTP('atlas.ca.gov') 
ftp.login() 
ftp.cwd('/pub/naip/2012/doqqs_combined_color-nir/') 
print ftp.nlst() 

enter image description here

Смежные вопросы