【问题标题】:How to list all folders in a ftp directory?如何列出ftp目录中的所有文件夹?
【发布时间】:2014-01-14 21:30:12
【问题描述】:

我正在尝试列出 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

【问题讨论】:

    标签: python ftp download ftplib


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      如果服务器是 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 正则表达式方面需要帮助吗?

      【讨论】:

        【解决方案3】:

        根据 abarnert 的回答,以下生成列表:

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

        【讨论】:

        • 还要从子文件夹中获取文件列表吗?
        猜你喜欢
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        相关资源
        最近更新 更多