如何让pysftp仅下载文件前10MB后终止操作?
实现pysftp仅下载文件前10MB后终止
原代码里的pysftp.get()会完整下载整个文件,要实现只取前10MB后终止,需要手动控制文件读取的字节数,具体修改如下:
import os import pysftp sftp_folder_location = 'outbound' local_path = '/home/ubuntu/data' # 定义最大下载量:10MB = 10 * 1024 * 1024 字节 MAX_DOWNLOAD_SIZE = 10 * 1024 * 1024 # 单次读取的块大小(设为1MB,可按需调整) CHUNK_SIZE = 1024 * 1024 sftp = pysftp.Connection(host=Hostname, username=Username, password=Password, cnopts=cnopts) try: with sftp.cd(sftp_folder_location): if sftp.isfile(filename): local_file_path = os.path.join(local_path, filename) # 同时打开远程文件和本地文件,分块读写 with sftp.open(filename, 'rb') as remote_file, open(local_file_path, 'wb') as local_file: downloaded_bytes = 0 while downloaded_bytes < MAX_DOWNLOAD_SIZE: # 计算本次可读取的最大字节数,避免最后一次读取超额 read_size = min(CHUNK_SIZE, MAX_DOWNLOAD_SIZE - downloaded_bytes) chunk = remote_file.read(read_size) if not chunk: break # 如果文件本身不足10MB,提前结束 local_file.write(chunk) downloaded_bytes += len(chunk) finally: sftp.close()
核心逻辑说明:
- 放弃
get()方法,改用sftp.open()直接操作文件对象,实现分块读取 - 通过
MAX_DOWNLOAD_SIZE严格控制总下载字节数 - 循环读取时动态计算单次读取量,确保不超过剩余需要下载的大小
- 用
try...finally保证SFTP连接最终关闭,避免资源泄漏
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

