如何列出ftp目录中的所有文件夹?

时间:2014-01-14 21:30:12

标签: python ftp download ftplib

我正在尝试列出ftp directory中的文件夹,以便输出如下:

[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

3 个答案:

答案 0 :(得分:1)

如果您查看ftplib文档,则有两个明显的功能:nlstdir

任何一个都会为您提供目录中所有成员的列表,包括文件和子目录。

使用nlst,您无法获得名称之外的任何信息。但如果你打算chdir或以其他方式使用它们,那就没关系;你会得到那些结果是常规文件的例外,并且可以跳过它们。

使用dir,您将以人类可读的形式获得完整的目录列表。您将必须捕获(通过传递callback函数)然后手动解析 - 这不是那么有趣,但是您可以提前知道哪些成员是文件以及哪些是目录。

答案 1 :(得分:1)

如果服务器是Windows机器,则输出 ftp.dir()看起来像01-14-14 04:21PM <DIR> Output

如果服务器属于* nix种类,则输出将类似于drwx------ 3 user group 512 Apr 22 2005 Mail

如果要检查项目是否为目录,请在每一行使用正则表达式。 如果项目是目录,则Windows FTP服务器将包含<DIR>,而* nix ftp服务器将以d开头。

您是否需要有关Python正则表达式的帮助?

答案 2 :(得分: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