使用Python的ftplib获取目录列表,可移植
时间:2020-03-06 14:30:52 来源:igfitidea点击:
我们可以使用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服务器格式化此列表的所有不同方式。
有没有一种可移植的方法来使目录列表充满数组?
(阵列应仅具有文件夹名称。)
解决方案
尝试使用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
LIST响应的布局没有标准。我们必须编写代码来处理最流行的布局。我将从Linuxls
和Windows ServerDIR
格式开始。但是,那里有很多变化。
如果我们无法解析较长的列表,请退回到nlst方法(返回NLST命令的结果)。要获得加分,请作弊:包含已知文件名的行中最长的数字可能是其长度。