使用ftplib下载部分文件

时间:2017-10-13 10:27:33

标签: python python-3.x ftp ftplib

有没有办法从最后一行(文件末尾)下载部分文件。就像文件超过40 MB,我想只检索最后一个块,假设2042字节。有没有办法使用python 3和ftplib来做到这一点?

2 个答案:

答案 0 :(得分:3)

尝试使用FTP.retrbinary()方法并提供rest参数,该参数是所请求文件的偏移量。由于偏移量是从文件的开头开始的,因此您需要使用文件大小和所需的数据字节数来计算偏移量。这是使用debian的FTP服务器的一个例子:

from ftplib import FTP

hostname = 'ftp.debian.org'
filename = 'README'
num_bytes = 500                # how many bytes to retrieve from end of file

ftp = FTP(hostname)
ftp.login()
ftp.cwd('debian')

cmd = 'RETR {}'.format(filename)
offset = max(ftp.size(filename) - num_bytes, 0)
ftp.retrbinary(cmd, open(filename, 'wb').write, rest=offset)

ftp.quit()

这将检索所请求文件末尾的最后num_bytes个字节,并将其写入当前目录中同名文件。

retrbinary()的第二个参数是回调函数,在这种情况下它是可写文件的write()方法。您可以编写自己的回调来处理检索到的数据。

答案 1 :(得分:1)

只需使用rest retrbinary参数告诉服务器它应该开始传输数据的文件偏移量。来自documentation

  

FTP.retrbinary(命令,回调[,maxblocksize [,rest]])
  ... rest意味着与transfercmd()方法相同。

     

FTP.transfercmd(cmd [,rest])
  ...如果给出了可选的休息,则向服务器发送REST命令,将rest作为参数传递。 rest通常是一个字节偏移到请求的文件中,告诉服务器重新开始以请求的偏移量发送文件的字节,跳过初始字节。