Python的ftplib库本身并不支持断点续传
首先,确保已经安装了ftplib
和hashlib
库。如果没有安装,可以使用以下命令安装:
pip install ftplib
然后,使用以下代码实现断点续传:
import os import hashlib from ftplib import FTP def md5(file_path): hasher = hashlib.md5() with open(file_path, 'rb') as f: buf = f.read(65536) while buf: hasher.update(buf) buf = f.read(65536) return hasher.hexdigest() def resume_download(ftp, remote_file_path, local_file_path): if not os.path.exists(local_file_path): with open(local_file_path, 'wb') as f: ftp.retrbinary('RETR ' + remote_file_path, f.write) else: local_md5 = md5(local_file_path) with open(local_file_path, 'rb') as f: ftp.sendcmd('TYPE I') remote_md5 = ftp.sendcmd('MD5 ' + remote_file_path) remote_md5 = remote_md5.split()[1] if local_md5 == remote_md5: print("File already fully downloaded.") else: with open(local_file_path, 'ab') as f: ftp.retrbinary('RETR ' + remote_file_path, f.write, rest=os.path.getsize(local_file_path)) print("Download resumed from the last successfully downloaded byte.") def main(): ftp = FTP('ftp.example.com') ftp.login(user='username', passwd='password') remote_file_path = '/path/to/remote/file' local_file_path = '/path/to/local/file' resume_download(ftp, remote_file_path, local_file_path) ftp.quit() if __name__ == '__main__': main()
请将ftp.example.com
、username
、password
、/path/to/remote/file
和/path/to/local/file
替换为实际的FTP服务器地址、用户名、密码、远程文件路径和本地文件路径。这个脚本将尝试从上次成功下载的字节处继续下载文件。如果文件已经完全下载,它将输出相应的消息。