使用ftplib下载部分文件
有没有办法从最后一行(文件结束)只下载部分文件。就像文件超过40 MB一样,我想只检索最后一块,比如说2042字节。有没有可能通过ftplib使用python 3来做到这一点?使用ftplib下载部分文件
尝试使用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()
方法。您可以编写自己的回调来处理检索到的数据。
谢谢,这真的很有帮助 – Nastyjoe
只需使用retrbinary
的rest
参数告诉服务器应该开始传输数据的文件偏移量。从documentation:
FTP.retrbinary(命令,回调[,maxblocksize [,休息]])
...其余意味着同样的事情在transfercmd()方法。FTP.transfercmd(cmd [,rest])
...如果给出可选休息,则将REST命令发送到服务器,将rest作为参数传递。休息通常是一个字节偏移到请求的文件,告诉服务器重新开始发送文件的字节在请求的偏移量,跳过最初的字节。
不,据我所知,由于我们下载和接收数据包的方式,不可能这样做。但是,您可以流式传输文件,然后只读最后几个块。有关更多详细信息,请参阅[本答案](https://*.com/a/18773444/8381175)。 –