当前位置:  开发笔记 > 编程语言 > 正文

使用Python的ftplib来获取目录列表,可移植

如何解决《使用Python的ftplib来获取目录列表,可移植》经验,为你挑选了2个好方法。

您可以使用ftplib在Python中提供完整的FTP支持.但是,获取目录列表的首选方法是:

# File: ftplib-example-1.py

import ftplib

ftp = ftplib.FTP("www.python.org")
ftp.login("anonymous", "ftplib-example-1")

data = []

ftp.dir(data.append)

ftp.quit()

for line in data:
    print "-", line

产量:

$ python ftplib-example-1.py
- total 34
- drwxrwxr-x  11 root     4127         512 Sep 14 14:18 .
- drwxrwxr-x  11 root     4127         512 Sep 14 14:18 ..
- drwxrwxr-x   2 root     4127         512 Sep 13 15:18 RCS
- lrwxrwxrwx   1 root     bin           11 Jun 29 14:34 README -> welcome.msg
- drwxr-xr-x   3 root     wheel        512 May 19  1998 bin
- drwxr-sr-x   3 root     1400         512 Jun  9  1997 dev
- drwxrwxr--   2 root     4127         512 Feb  8  1998 dup
- drwxr-xr-x   3 root     wheel        512 May 19  1998 etc
...

我想这个想法是解析结果以获得目录列表.但是,此列表直接取决于FTP服务器格式化列表的方式.为此编写代码将不得不预测FTP服务器可能格式化此列表的所有不同方式,这将是非常混乱的.

是否有一种可移植的方式来获取填充目录列表的数组?

(该数组应该只有文件夹名称.)



1> William Kell..:

尝试使用ftp.nlst(dir).

但请注意,如果文件夹为空,则可能会引发错误:

files = []

try:
    files = ftp.nlst()
except ftplib.error_perm, resp:
    if str(resp) == "550 No files found":
        print "No files in this directory"
    else:
        raise

for f in files:
    print f


谢谢你.5年后:从版本3.3开始不推荐使用:改为使用mlsd().
是的,这回答了这个问题,我认为这很好,但这完全不是一个可扩展的答案.如果我需要一个带属性的文件对象怎么办?不要悲观,但它会很方便.
哦,很好地发现了550!Upvoted.:)

2> Giampaolo Ro..:

解析FTP目录列表的可靠/标准化方法是使用MLSD命令,现在所有最近/体面的FTP服务器都应支持该命令.

import ftplib
f = ftplib.FTP()
f.connect("localhost")
f.login()
ls = []
f.retrlines('MLSD', ls.append)
for entry in ls:
    print entry

上面的代码将打印:

modify=20110723201710;perm=el;size=4096;type=dir;unique=807g4e5a5; tests
modify=20111206092323;perm=el;size=4096;type=dir;unique=807g1008e0; .xchat2
modify=20111022125631;perm=el;size=4096;type=dir;unique=807g10001a; .gconfd
modify=20110808185618;perm=el;size=4096;type=dir;unique=807g160f9a; .skychart
...

从python 3.3开始,ftplib将提供一个特定的方法来执行此操作:

http://bugs.python.org/issue11072

http://hg.python.org/cpython/file/67053b135ed9/Lib/ftplib.py#l535

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有