有没有办法从最后一行(文件末尾)下载部分文件。就像文件超过40 MB,我想只检索最后一个块,假设2042字节。有没有办法使用python 3和ftplib来做到这一点?
答案 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通常是一个字节偏移到请求的文件中,告诉服务器重新开始以请求的偏移量发送文件的字节,跳过初始字节。