当服务器上的(子)目录在哪里时,python ftp.nlst()返回空列表

时间:2018-06-29 09:51:10

标签: python python-3.x ftp ftplib

我的应用程序需要从远程FTP下载所有目录,这是我第一次测试python的ftplib

当我尝试使用命令ftp.nlst()列出远程FTP中的所有目录时,它将返回一个空列表。我肯定知道目录不是空的,因为此命令:ftp.retrlines('list')返回了一个对象,该对象显示目录内子文件夹的名称。

在测试时,我尝试了其他命令,例如ftp.cwd('/other-dir/')ftp.pwd(),但这些命令似乎都不起作用。

这是我用来显示子目录列表的代码:

from ftplib import FTP

def ftpConnection():
    ftp = FTP('ftp-address')
    ftp.login('user', 'password') 
    lista = ftp.nlst()
    return (lista)

print(ftpConnection())

输出:

[]

您会看到列表为空。


这是我的retrlines代码:

def ftpConnection():
    ftp = FTP('remoteFtp')
    ftp.login('user', 'password') 
    ftp.retrlines('LIST')

print (ftpConnection())

输出:

drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 09:23 .
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 28 05:11 103367
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 02:01 121901
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Sep 23  2016 123233
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 09:19 125183
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 02:34 133028

这是命令行ftp的输出:

230-Welcome clt_kantar_italy from remoteFtp. You are now logged in to the server.
230 User logged in, proceed.
ftp> dir
200 PORT command successful.
150 File status okay; about to open data connection.
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 09:23 .
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 28 05:11 103367
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 02:01 121901
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Sep 23  2016 123233
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 09:19 125183
drw-rw-rwx 1 clt_kantar_italy clt_kantar_italy          512 Jun 29 02:34 133028
226 Closing data connection. Transferred 481 bytes.
ftp: 484 bytes received in 0.01secondi 37.23Kbyte/sec)
ftp> ls
200 PORT command successful.
150 File status okay; about to open data connection.
226 Closing data connection. Transferred 0 bytes.

1 个答案:

答案 0 :(得分:1)

因此,您可以自己用ftp看到它(根据我的假设,它是Windows ftp.exe。)

  • dir命令,该命令使用LIST FTP命令,返回文件夹;
  • 使用ls FTP命令的
  • NLST命令不会返回文件夹。

这就是您的 FTP服务器的行为-它不会返回NLST中的文件夹。

如果需要从 FTP服务器检索文件夹,则必须使用LIST