获取ftp.retrlines将文件的内容打印到字符串

时间:2014-02-14 15:43:37

标签: python lambda

我想用ftplib获取文件的内容并将其存储在python中的字符串变量中。我的第一次尝试如下。我猜lambdas不能包含赋值 - 也许是因为lambda是一个函数+应该是自包含的变量(?)。

contents = ""
ftp.retrlines("RETR " + filename, lambda s: contents=s) #lambda cannot contain assignment

无论如何,我是否需要将输出捕获到stdout或者是否有更简单的方法?

2 个答案:

答案 0 :(得分:0)

首先,这失败是因为python does not allow statements inside lambdas, only pure expressions

其次,即使你把它作为一个函数,我,例如:

contents = ""
def assign(s):
    contents=s
ftp.retrlines("RETR " + filename, assign )

它会失败,因为通过运行contents=s你只是创建一个局部变量,而不是引用(全局)变量contents

你可以进一步纠正它:

contents = ""
def assign(s):
    global contents
    contents=s
ftp.retrlines("RETR " + filename, assign )

但是这个(使用全局变量)通常被认为是一种不好的做法。相反,您可能应该重新考虑回复实际执行所有您需要处理的数据。这并不容易;您可能希望将functools.partial放在编程带的便利位置。

答案 1 :(得分:0)

outStr = StringIO.StringIO() # Use a string like a file.
ftp.retrlines('RETR ' + fileToGet, outStr.write)
print outStr.getvalue()
outStr.close()

https://docs.python.org/2/library/stringio.html