Python Wierd循环输出FTP

时间:2015-06-26 18:46:35

标签: python for-loop ftp

使用功能块列表列出FTP目录。

def list_directory():
        try:
            ftp = ftplib.FTP("0.0.0.0")
            ftp.login(username, password)
            files = []
            files = ftp.retrlines('LIST')
        except ftplib.error_perm, resp:
           if str(resp) == "550 No files or directory found":
                print "No files in this directory"
           else:
                raise

        for x in files:
            print files

list_directory()

这是输出。

drwxr-xr-x   2 ftpclient1 ftpclient1     4096 Jun 25 21:14 directory1
drwxr-xr-x   2 ftpclient1 ftpclient1     4096 Jun 25 21:18 directory2
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete
226 Transfer complete

我做错了什么导致这次“226转移完成”多次以及如何纠正?

当我尝试纠正它时

def list_directory():
        try:
            ftp = ftplib.FTP("192.168.189.130")
            ftp.login(username, password)
            files = []
            files = ftp.retrlines('LIST')
        except ftplib.error_perm, resp:
           if str(resp) == "550 No files or directory found":
                print "No files in this directory"
           else:
                raise

        for x in files:
            print x

list_directory()

将打印变量从print files更改为print x我就明白了。

drwxr-xr-x   2 ftpclient1 ftpclient1     4096 Jun 25 21:14 directory1
drwxr-xr-x   2 ftpclient1 ftpclient1     4096 Jun 25 21:18 directory2
2
2
6

T
r
a
n
s
f
e
r

c
o
m
p
l
e
t
e

请帮忙。

2 个答案:

答案 0 :(得分:0)

文件是一个字符串。仅打印文件变量,您应该看到226传输完成。现在,您正在遍历该字符串中的每个字符。

答案 1 :(得分:0)

非常感谢你!

对功能进行了更改并立即获得预期输出: - )

以下是更改:

                return True
           return False
#       else:
#               raise

#       for x in files:
        print files

基于“purrogrammer”说,这是有道理的。注释掉“else”,“raise”和“for x in files”(循环)。而是使用“返回”True或False。现在获得所需的输出。

谢谢! : - )