将 retrbinary 输出存储到文件对象 - Python
Store retrbinary output to fileobject - Python
有没有办法可以将 ftplib 中的 retrbinary 函数的输出存储到 python 中的文件对象中?这个想法是从 ftp 服务器检索文件并使用 lambda 函数将它们上传到 s3 存储桶。想知道这是否可以在不使用 paramiko 库的情况下单独使用 ftplib 来完成。
import ftplib
server = ftplib.FTP()
server.connect(xxxx)
server.login()
with open('test.xlsx',wb) as fp:
server.retrbinary('RETR test.xlsx',fp.write)
server.quit()
以上代码将 test.xlsx 文件下载到本地,但我需要将其存储到文件对象中。
您可以使用内存字节缓冲区!。您可以将 buffer.write
函数作为回调传递给 retrbinary
方法。
>>> from io import BytesIO
>>> buffer = BytesIO()
>>> buffer.write(b"Hello")
5
>>> buffer.getvalue()
b'Hello'
因此您可以将现有代码更改为类似这样的内容,
>>> import ftplib
>>> from io import BytesIO
>>>
>>> buffer = BytesIO()
>>> server = ftplib.FTP()
>>> server.connect(xxxx)
>>> server.login()
>>> server.retrbinary('RETR test.xlsx', buffer.write)
>>> server.quit()
因此在 retrbinary
调用完成后,缓冲区将填充字节值,您可以通过调用 buffer.getvalue()
方法来确认。
有没有办法可以将 ftplib 中的 retrbinary 函数的输出存储到 python 中的文件对象中?这个想法是从 ftp 服务器检索文件并使用 lambda 函数将它们上传到 s3 存储桶。想知道这是否可以在不使用 paramiko 库的情况下单独使用 ftplib 来完成。
import ftplib
server = ftplib.FTP()
server.connect(xxxx)
server.login()
with open('test.xlsx',wb) as fp:
server.retrbinary('RETR test.xlsx',fp.write)
server.quit()
以上代码将 test.xlsx 文件下载到本地,但我需要将其存储到文件对象中。
您可以使用内存字节缓冲区!。您可以将 buffer.write
函数作为回调传递给 retrbinary
方法。
>>> from io import BytesIO
>>> buffer = BytesIO()
>>> buffer.write(b"Hello")
5
>>> buffer.getvalue()
b'Hello'
因此您可以将现有代码更改为类似这样的内容,
>>> import ftplib
>>> from io import BytesIO
>>>
>>> buffer = BytesIO()
>>> server = ftplib.FTP()
>>> server.connect(xxxx)
>>> server.login()
>>> server.retrbinary('RETR test.xlsx', buffer.write)
>>> server.quit()
因此在 retrbinary
调用完成后,缓冲区将填充字节值,您可以通过调用 buffer.getvalue()
方法来确认。