我想用ftplib获取文件的内容并将其存储在python中的字符串变量中。我的第一次尝试如下。我猜lambdas不能包含赋值 - 也许是因为lambda是一个函数+应该是自包含的变量(?)。
contents = ""
ftp.retrlines("RETR " + filename, lambda s: contents=s) #lambda cannot contain assignment
无论如何,我是否需要将输出捕获到stdout或者是否有更简单的方法?
答案 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()